C# 在我的体系结构中的类似类之间共享域逻辑

C# 在我的体系结构中的类似类之间共享域逻辑,c#,asp.net,asp.net-mvc,architecture,poco,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“代码优先”,所以我添加了自己的类,并对它们进行修饰,以便在存储库中

我的MVC ASP.NET web应用程序按如下方式拆分:

Web Application Layer
  Views

Domain Layer
  Repository
    [Repository and Interfaces here]
  Domain
    [Domain Classes here]
这是一个全新的、不断发展的过程,我开始发现它存在一些问题。我的域类是POCO对象——我使用Linq to SQL“代码优先”,所以我添加了自己的类,并对它们进行修饰,以便在存储库中使用它们。起初进展顺利,我可以将业务/域逻辑添加到类中,看起来非常干净

最近,我创建了许多基于同一个“核心”表(一个“设备”表)的数据库视图。我为每个视图创建一个POCO域类,以便在我的报告中读取它。我遇到的问题是,添加到核心设备域类的域逻辑对我的新视图不可用。我不能使用公共基类,因为如果您使用属性来修饰类,LINQtoSQL就不能使用公共基类。不使用视图不是一个选项,因为它们在web应用程序之外也很有用

是否有一个好的解决方案,我想知道我是否需要考虑将存储库使用的类与一组单独的“域类”分开来解决这个问题

[编辑]根据要求提供更多信息。 例如,我的“设备”类(映射到数据库的域类)包含以下代码:

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类中


谢谢

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

您的所有类都可以调用helper,因为它们需要访问域逻辑

有时,helper模式被认为是一种反in模式,但在您的情况下,不可能将其放在基类中


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

您是否尝试将域类作为部分类?在这两个地方都有定义。不要认为这有帮助-我可能有3个类-“设备视图1”,“设备视图2”,“设备视图3”,它们不都是同一个类-但它们有共同的核心功能-你能举一个或两个你所说的域逻辑类型的例子吗?很抱歉延迟!我用一个例子更新了这个问题,这是一个很好的一般性建议,但它并不能真正解决我的问题。这是对我来说最好的解决方案,除了重构我的数据库以摆脱这种情况;)