在我的应用程序的域核心中,我有一个Order
对象。它具有私有设置器,因为不应随意修改这些属性,而只能在对对象执行公共功能之一的上下文中进行修改。
public class Order
{
public int Id { get; private set; }
public int MarketplaceId { get; private set; }
public int CustomerId { get; set; }
public OrderStatus Status { get; private set; }
public bool Validate() { //stuff }
public void Fulfill()
{
//messes with order status, etc.
}
}
我有一个OrderRepository
用于数据访问的,它位于我的架构的外部边缘,它有一个GetOrderById(int orderId)
功能。此函数从数据库中提取以填充Order
对象。我需要能够填充我的Order
对象,但我宁愿不将属性公开,因为使用该Order
对象的任何其他应用程序或服务都不应该设置这些属性。我如何构建它以Order
从存储库中填充对象,但仍保留我对Order
对象的封装?
似乎通过一个或多个构造函数(重载)执行此操作会很麻烦,但我不确定还能做什么。