Enterprise Architecture
何謂Domain Model?
Domain Model部分是專門處理領域的概念層,只要跟事物與事物之間的關係存在這個模型。
這裡的事物指的是?
例如:實務上在建構電商系統,這個事物表示購物車、訂單、訂單明細的事物,這些事物又包含了資料,更重要是還有行為。
Domain Model越能表示真實的領域越好,因為可以更容易理解組織中的業務邏輯、規則、驗證過程。
最後Domain Model與Active Record 模式之間差別在於,Domain Model中的業務實體不知道如何持久化自己。
什麼是持久化呢?
將應用程式的資料保存且保留某種形式的儲存中,以便應用程式重新啟動或不同執行時間上保留資料。
領域模型通常包含以下幾個特點:
- 實體(Entities): 表示領域中的具體事物,如客戶、訂單、產品等。
- 屬性(Attributes): 描述實體的特徵或特性,如客戶的姓名、訂單的日期等。
- 關係(Relationships): 描述實體之間的相互關聯,例如一個訂單屬於一個客戶,形成客戶和訂單之間的關係。
- 操作(Operations): 描述對實體進行的操作,例如對訂單的新增、修改、刪除等。
領域模型通常會用在UML的呈現,可以顯示系統的結構和行為,有助於團隊間的理解,並提供一個基礎,以便進一步的軟體設計和實現,以下面一個例子來說明Domain Model的基礎應用。
using System;
using System.Collections.Generic;
// 實體類別:產品
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
// 實體類別:訂單項目
public class OrderItem
{
public int OrderItemId { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
public decimal Subtotal => Quantity * Product.Price;
}
// 實體類別:訂單
public class Order
{
public int OrderId { get; set; }
public DateTime OrderDate { get; set; }
public List<OrderItem> OrderItems { get; set; } = new List<OrderItem>();
public decimal Total => OrderItems.Sum(item => item.Subtotal);
public void AddOrderItem(Product product, int quantity)
{
var orderItem = new OrderItem
{
Product = product,
Quantity = quantity
};
OrderItems.Add(orderItem);
}
}
class Program
{
static void Main()
{
// 建立產品
var laptop = new Product
{
ProductId = 1,
Name = "Laptop",
Price = 999.99m
};
var mouse = new Product
{
ProductId = 2,
Name = "Mouse",
Price = 19.99m
};
// 建立訂單
var order = new Order
{
OrderId = 1,
OrderDate = DateTime.Now
};
// 新增訂單項目
order.AddOrderItem(laptop, 2);
order.AddOrderItem(mouse, 1);
// 顯示訂單總金額
Console.WriteLine($"Order Total: ${order.Total}");
}
}
上述例子中有三個實體類別:Product、OrderItem、 Order,這個模型就是一個簡易的訂單系統,其中包含產品、訂單項目和訂單等實體類別。
類別都有屬性描述其特徵以及Domain Model的方法來執行操作,以上就是Domain Model的介紹。
元哥的筆記