C# 设计布局/图案

C# 设计布局/图案,c#,wpf,design-patterns,C#,Wpf,Design Patterns,我对C#还是相当陌生的,我正在努力决定构建一个新项目的最佳方式。这是我想做的,我想反馈我的想法 表示层 业务层(独立类库) 数据层(独立类库) 模型层(独立类库) 我正在努力解决的问题是,让数据层和业务层中的类继承我在模型层中定义的类型是否合适。通过这种方式,我可以使用我认为合适的任何新属性在我的业务层中根据需要扩展类型。我可能不会在我的业务层类中使用模型类型中的所有属性,但这真的很重要吗?如果这还不够清楚,我可以试着举个例子。我认为举个例子是好的——我不认为你的建议一定是坏的,但这取决于你

我对C#还是相当陌生的,我正在努力决定构建一个新项目的最佳方式。这是我想做的,我想反馈我的想法

  • 表示层
  • 业务层(独立类库)
  • 数据层(独立类库)
  • 模型层(独立类库)

我正在努力解决的问题是,让数据层和业务层中的类继承我在模型层中定义的类型是否合适。通过这种方式,我可以使用我认为合适的任何新属性在我的业务层中根据需要扩展类型。我可能不会在我的业务层类中使用模型类型中的所有属性,但这真的很重要吗?如果这还不够清楚,我可以试着举个例子。

我认为举个例子是好的——我不认为你的建议一定是坏的,但这取决于你试图实现的目标

为什么要从模型层中的类继承?特定模型类的接口和用途是什么,从模型类继承的业务逻辑类的用途是什么

继承真的有意义吗

继承会违反利斯科夫的替代原则吗

编辑:

wpfwanabe,我会小心使用继承,因为它似乎是一个简单的选择。我特别提到了Liskov替换原则,因为它涉及确定继承何时有效

此外,您可能还想了解面向对象开发的“可靠”设计原则(包括Liskov的替代原则):


我认为举个例子是好的——我不认为你的建议一定是坏的,但这取决于你试图实现的目标

为什么要从模型层中的类继承?特定模型类的接口和用途是什么,从模型类继承的业务逻辑类的用途是什么

继承真的有意义吗

继承会违反利斯科夫的替代原则吗

编辑:

wpfwanabe,我会小心使用继承,因为它似乎是一个简单的选择。我特别提到了Liskov替换原则,因为它涉及确定继承何时有效

此外,您可能还想了解面向对象开发的“可靠”设计原则(包括Liskov的替代原则):


一般做法是对层转换使用封装,而不是继承。请考虑以下两个范例(如果我理解正确)

Model/Data Layer:
    Customer
    Order

Business Layer:
    MyCustomer (encapsulates Data.Customer)
    MyOrder (encapsulates Data.Order)
在执行第一条(继承)路线时,有两个主要问题:

  • 当您修改基本(数据/模型)类时,您将被迫更改业务类
  • 获取对象关系很困难,通常需要非多态方法。也就是说,如果模型或数据层在
    Customer
    对象上公开了
    Order
    的集合,那么让
    MyCustomer
    类公开
    MyOrder
    对象的集合是困难的,也是“笨拙的”
  • 利用封装处理这两个问题,这无疑是我推荐的方法


    根据您的名字判断,我假设您正在寻找编写WPF应用程序。如果是这种情况,请查看设计模式。

    一般做法是使用封装,而不是继承来进行层转换。请考虑以下两个范例(如果我理解正确)

    Model/Data Layer:
        Customer
        Order
    
    Business Layer:
        MyCustomer (encapsulates Data.Customer)
        MyOrder (encapsulates Data.Order)
    
    在执行第一条(继承)路线时,有两个主要问题:

  • 当您修改基本(数据/模型)类时,您将被迫更改业务类
  • 获取对象关系很困难,通常需要非多态方法。也就是说,如果模型或数据层在
    Customer
    对象上公开了
    Order
    的集合,那么让
    MyCustomer
    类公开
    MyOrder
    对象的集合是困难的,也是“笨拙的”
  • 利用封装处理这两个问题,这无疑是我推荐的方法


    根据您的名字判断,我假设您正在寻找编写WPF应用程序。如果是这样,请查看设计模式。

    是否将每个层的类放在单独的库中取决于将来是否需要编写更多需要使用这些类的应用程序。你可能认为你需要马上开始做。从我的经验来看,在编码并至少有了某种概念证明之后,我开始有了更好的想法。在项目进行到一半的时候,组织代码,例如重新分解、组织到库中等是很容易的。它试图在上线前就这么做,这是有风险的,不是一个好主意

    关于你问题的其余部分,我想向你介绍我从马丁·福勒那里学到的东西,因为我说的再好不过了,如果我说的话,我只是在他后面重复:



    是否将每个层的类放在单独的库中取决于将来是否需要编写更多需要使用这些类的应用程序。你可能认为你需要马上开始做。从我的经验来看,在编码并至少有了某种概念证明之后,我开始有了更好的想法。在项目进行到一半的时候,组织代码,例如重新分解、组织到库中等是很容易的。它试图在上线前就这么做,这是有风险的,不是一个好主意

    关于你问题的其余部分,我将向你介绍我从马丁·福勒那里学到的东西,因为我说的再好不过了,如果我说的话,我只是在重复