繁体   English   中英

在我的架构中的相似类之间共享域逻辑

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM