【发布时间】:2015-06-04 01:44:42
【问题描述】:
我有一个这样的项目:
网站 --> 服务 --> 存储库 --> 域对象
我使用 Entity Framework 6 和 Autofac。
有人告诉我应该从我的域对象中删除所有构造逻辑,以便它们尽可能保持 POCO。问题是,我有在创建新对象时应该初始化的属性,例如 CreationDate 和 UserIdCreatedBy
例如,如果我有一个 Client 对象,我会在 Client 类构造函数中使用以下逻辑:
public class Client
{
public Client()
{
this.CreationDate = DateTime.UtcNow;
if (Thread.CurrentPrincipal is CustomPrincipal
&& ((CustomPrincipal)Thread.CurrentPrincipal).CustomIdentity != null
&& ((CustomPrincipal)Thread.CurrentPrincipal).CustomIdentity.User != null)
{
this.UserIdCreatedBy = ((CustomPrincipal)Thread.CurrentPrincipal).CustomIdentity.User.UserId;
}
}
... Properties and such
}
所以现在,我想将此构造函数逻辑从域对象中取出到该对象的工厂中。我怎样才能优雅地做到这一点,以便实体框架在我调用 MyContext.Clients.Create() 时使用它?这甚至可能吗?我知道调用 Thread 的 CurrentPrincipal 也不是那么好,但它是为了显示逻辑可能比普通默认值更复杂的示例。
非常感谢
【问题讨论】:
-
所以他们希望你创建一个贫血模型。只是一袋没有行为的数据?
-
@PhilipStuyck 这就是 POCO(普通旧 CLR 对象)的最简单形式。 ;)
-
那是一种反模式。
-
我愿意接受建议。你会怎么做?
-
问题是您为什么要删除该构造函数逻辑。你被告知删除它,由谁?如果那是您的老板并且您无法改变他的想法,那么无论我说什么,您都必须这样做;-)我实际上是在尝试与您在这里所做的相反。我正在尝试将行为放在我的域对象中。
标签: c# asp.net-mvc-5 entity-framework-6 repository-pattern poco