我应该在分部类中分离属性和方法吗?

J.D*_*Ray 4 c# oop

我正在为应用程序编写基础类,并希望正确构建它们以实现长期可维护性.为此,我正在研究实现哪些设计模式,使用接口,抽象类以及将持久性与活动分离.我的头脑游泳的模式,范例和原则.

我有一个类Product,我已经创建了一个接口IProduct.我相信我需要制作Product和抽象类,因为它的任何实例都需要是属性的六个值之一Category.所以,我的第一个问题:以下是适当的方法吗?

abstract class Product : IProduct
{
    // Fields
    // Properties
    // Methods
}

interface IProduct
{
    // Properties
}

public class Model : IProduct
{
    public Model()
    {
        Category = "Model";
    }

    // Model-specific fields
    // Model-specific properties
    // Model-specific methods
}
Run Code Online (Sandbox Code Playgroud)

我读过的文章,包括此前回答的问题,表明我应该设计属性和方法的分离(持久性和活动性).为此,上面的代码真的应该是这样的吗?

abstract class Product : IProduct
{
    // Fields
    // Properties
    // Methods
}

interface IProduct
{
    // Properties
}

public partial class Model : IProduct
{
    public Model()
    {
        Category = "Model";
    }

    // Model-specific fields
    // Model-specific properties
}

public partial class Model : IProduct
{
    // Model-specific methods
}
Run Code Online (Sandbox Code Playgroud)

当然,这假设我的第一部分是正确的,但也许答案会启发我如何做事.

最后,如果属性和方法的分离是一件好事,并且Product有一些适用于它的所有具体版本的方法,我应该将它们移动到这样的单独的抽象类吗?

abstract class Product : IProduct
{
    // Fields
    // Properties
}
abstract class Product : IProduct
{
    // Methods
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 6

我在保持partial类中看到的唯一用途是两个单独的系统更新这两个文件.例如,当使用Visual Studio设计器(例如Windows窗体设计器)更新自己的类文件时就是如此.对于您拥有的另一个自动生成的类,另一件事情可能是真的.一个由系统维护,一个由您维护.

我从来没有想过要partial自己保留两个单独的类文件的冲动.我通常使用#region指令来分割方法和属性.

  • @WillMarcouiller我同意在方法中使用区域,但在类中我没有看到问题. (4认同)
  • @WillMarcouiller我使用区域来分隔属性,方法和构造函数.我不在代码块中使用它们,只是在类级别它有助于导航大型代码文件,并且不是像在方法内使用区域那样的反模式(如果它们应该将方法拆分为单独的方法那么大. (2认同)
  • @mason每个代码片段只需要一个新行分隔符.这足以表明意图.每个人都可以识别出什么是字段,什么是方法,什么是属性,为什么要为它添加一些无用的代码? (2认同)
  • @WillMarcouiller并不是你无法识别它.这是一个组织的事情,它可以帮助您快速找到您正在寻找的东西.如果你打开一个文件并且你知道你正在寻找一个构造函数,那么只需要简单地扩展Constructors区域就可以了,而不必检查所有方法.如果你有很多类似的方法,你甚至可以将它们组合成不同的组.这不是一件大事,但它有助于整洁.而且我不喜欢凌乱的代码. (2认同)