[英]Sharing domain logic between similar classes in my architecture
我的MVC ASP.NET Web应用程序按如下方式拆分:
Web Application Layer
Views
Domain Layer
Repository
[Repository and Interfaces here]
Domain
[Domain Classes here]
它是相当新的并且在不断发展,并且我开始看到它的一些问题。 我的域类是POCO对象-我正在使用Linq to SQL“ Code First”,因此我添加了自己的类并装饰它们以在存储库中使用它们。 最初,一切顺利,我可以在类中添加业务/域逻辑,而且看起来很干净。
最近,我创建了许多基于相同“核心”表(“设备”表)的数据库视图。 我为每个视图创建一个POCO域类,以便可以在我的资源库中读取它。 我遇到的麻烦是,添加到核心设备域类的域逻辑不适用于我的新视图。 我不能使用公共基类,因为如果您使用属性来装饰类,则Linq to SQL对此不起作用。 不使用视图不是一种选择,因为它们在Web应用程序之外也很有用。
有没有很好的解决方案,我想知道是否需要考虑将存储库使用的类与一组单独的“域类”分开来解决此问题?
[编辑]根据要求提供更多信息。 例如,我的“ Equipment”类(映射到数据库的域类)包含以下代码:
public string EquipmentDescription
{
get
{
return String.Format("U{0}{1}{2}",
String.Format("{0}", UPos.ToString("00")),
String.IsNullOrEmpty(EquipmentName) ? "" : ": " + EquipmentName,
String.IsNullOrEmpty(Label) ? "" : " - " + Label
);
}
}
现在,我在数据库中有一个名为“ EquipmentWithCableDetails”的视图,该视图包含有关设备详细信息的其他有用信息-因此,我创建了一个对该视图进行建模的类(以便能够从中读取)。 在适用于该新类的代码中,我想显示EquipmentDescription-但该属性仅存在于Equipment类中。
谢谢!
我所做的就是将我的部分类/实体类/域类放在一个单独的项目中,这样,包括测试项目在内的所有项目都可以引用该项目。 我发现这对我来说真的很好,您可以像完成操作一样将所有数据访问逻辑和业务逻辑留在域层中。
在类之间共享逻辑时可以使用的一种模式是助手模式。
您所有的类都可以调用帮助程序,我们需要访问该域逻辑。
有时,助手模式被认为是反模式,但是在您的情况下,不可能将其放在基类中。
http://blogs.msdn.com/b/nickmalik/archive/2005/09/06/461404.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.