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

时间:2011-03-24 10:17:08

标签: c# asp.net asp.net-mvc architecture poco

我的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”,所以我正在添加我自己的类并装饰它们以在Repository中使用它们。起初这很顺利,我可以在类中添加业务/域逻辑,看起来很干净。

最近,我创建了许多基于相同“核心”表的数据库视图 - “设备”表。我为每个视图创建了一个POCO域类,以便我可以在我的Repoisitory中读取它。我遇到的麻烦是添加到核心设备域类的域逻辑不适用于我的新视图。我不能使用公共基类,因为如果你使用属性来装饰你的类,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类中。

谢谢!

2 个答案:

答案 0 :(得分:1)

我所做的是将我的部分类/实体类/域类放在一个单独的项目中,这样所有项目(包括测试项目)都可以引用这个项目。我发现这对我来说非常有用,你可以像在你的网站层中那样将所有数据访问逻辑和业务逻辑留在你的域层中。

答案 1 :(得分:0)

在类之间共享逻辑时可以使用的一种模式是辅助模式。

所有类都可以调用帮助程序,我们需要访问域逻辑。

有时辅助模式被认为是反模式,但在你的情况下,不可能把它放在基类中。

http://blogs.msdn.com/b/nickmalik/archive/2005/09/06/461404.aspx