Мне поручено составить диаграмму классов UML системы онлайн-заказов в пиццерии. Я создал классную библиотеку:
public class Customer : IAdd, IUpdate, IDelete, IView
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
public string CustomerContact { get; set; }
public string CustomerEmail { get; set; }
public bool hasPalmCard { get; set; }
public void Add()
{
//code to add customer goes here
}
public void Update()
{
//code to update customer goes here
}
public void Delete()
{
//code to delete customer goes here
}
public void View()
{
//code to view customer list goes here
}
}
public class Product : Category, IAdd, IUpdate, IDelete, IView
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public void Delete()
{
//code to delete product goes here
}
public void View()
{
//code to view product list goes here
}
public void Update()
{
//code to update product goes here
}
public void Add()
{
//code to add product goes here
}
}
public class Category : SubCategory
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
public class SubCategory
{
public int SubCategoryID { get; set; }
public string SubCategoryName { get; set; }
}
public class OrderList : Product, IComputeSubtotal
{
public int OrderListID { get; set; }
public int OrderQuantity { get; set; }
public decimal subtotalPrice;
public decimal getSubtotal(decimal pricePerProduct)
{
return subtotalPrice += pricePerProduct * OrderQuantity;
}
}
public class PurchaseOrder : OrderList, IComputeTotal
{
public int PurchaseOrderID { get; set; }
public DateTime PurchaseOrderDateTime { get; set; }
public decimal totalPrice;
public decimal getTotal(decimal subtotalPrice)
{
return totalPrice += subtotalPrice;
}
}
public class Receipt : PurchaseOrder, IComputeTotal
{
public int ReceiptNo { get; set; }
public DateTime ReceiptDateTime { get; set; }
public decimal Subtotal { get; set; }
public decimal CashRender { get; set; }
decimal IComputeTotal.getTotal(decimal serviceCharge)
{
return totalPrice += serviceCharge;
}
}
public class ReceiptWithChange : Receipt, IComputeChange
{
public decimal Change { get; set; }
public decimal getChange()
{
return Change = CashRender - totalPrice;
}
}
interface IAdd
{
void Add();
}
interface IUpdate
{
void Update();
}
interface IDelete
{
void Delete();
}
interface IView
{
void View();
}
interface IComputeSubtotal
{
decimal getSubtotal(decimal price);
}
interface IComputeTotal
{
decimal getTotal(decimal price);
}
interface IComputeChange
{
decimal getChange();
}
Мой профессор хочет, чтобы я реализовал трехслойную архитектуру: Data, Business и UI/Presentation. Возможно ли это, так как я только создаю библиотеку классов, и это должно было использоваться другим программистом? Если это возможно, как я могу его реализовать?
Благодарю!
Вы правы, вы не можете структурировать эти два класса в 3 уровня, просто потому, что каждый уровень 3-уровневой архитектуры имеет свою цель (вы назвали их: пользовательский интерфейс, логика и данные).
Все ваши классы явно относятся к бизнес-(или логическому) слою. Их методы должны каким-то образом обращаться к данным (через слой данных). Они сами доступны из слоя пользовательского интерфейса.
Итак, я подозреваю, что ваш профессор хочет что-то вроде этого:
Каждый пакет представляет собой уровень в трехуровневой архитектуре.
Вы можете уточнить свою модель, расширив диаграмму развертывания, чтобы отобразить, что определения реализованы как процедура базы данных, объекты веб-приложения или HTML-код. И т.п.