Domain Model 與 Data Model
過去我在設計Model時,主要都會以Data Model的思維去做設計,
Domain Model 與 Data Model
過去我在設計Model時,主要都會以Data Model的思維去做設計,
很直覺的會以資料庫欄位去設計Model模型,
而在驅動領域設計(Domain-Driven Design)的流行下,
Domain Model 受到了更大的重視,
Domain Model與Data Model的區別主要在於業務邏輯與方法,
如下Domain Model範例
// Domain Model(包含業務邏輯)
public class Order
{
public int Id { get; private set; }
public List<OrderItem> Items { get; private set; } = new List<OrderItem>();
public decimal TotalAmount => Items.Sum(item => item.GetSubtotal());
public void AddItem(Product product, int quantity)
{
if (quantity <= 0) throw new ArgumentException("數量必須大於0");
Items.Add(new OrderItem(product, quantity));
}
}
public class OrderItem
{
public Product Product { get; private set; }
public int Quantity { get; private set; }
public OrderItem(Product product, int quantity)
{
Product = product;
Quantity = quantity;
}
public decimal GetSubtotal()
{
return Product.Price * Quantity; // 計算小計,業務邏輯在這裡
}
}
而過往的DataModel設計就會如下
// Data Model(資料庫用的純資料結構)
public class OrderEntity
{
public int Id { get; set; }
public decimal TotalAmount { get; set; } // 通常會存在資料庫欄位
}
public class OrderItemEntity
{
public int Id { get; set; }
public int OrderId { get; set; } // 外鍵
public int ProductId { get; set; } // 外鍵
public int Quantity { get; set; }
public decimal Price { get; set; }
}
可以看出主要差異在於,資料模型只重視資料欄位,沒有業務邏輯與行為,
而Domain Model則會包含了業務邏輯來處理,
也因此,Domain Model與Data Model是可以相輔相成的存在,
資料庫操作使用Data Model來處理,使用Domain Model來處理業務行為,
達成單一職責原則(SRP),降低類別間耦合增加高內聚。
메타데이터
- post_id
- f3cb753f87f5
- slug
- domain-model-與-data-model-f3cb753f87f5
- url
- https://medium.com/@s97172634/domain-model-%E8%88%87-data-model-f3cb753f87f5
- canonical_url
- https://medium.com/@s97172634/domain-model-%E8%88%87-data-model-f3cb753f87f5
- author_url
- https://medium.com/@s97172634
- status
- ok
- fetched_at
- 2026-08-10 05:06:00