正确移动共同属性的方法

时间:2017-01-27 17:57:16

标签: c# oop object-oriented-analysis

我有一组属性约20个,我需要在两个不同的实体(类)中进行分层覆盖设置系统。

所以,我能想到的简单想法是,用这20个公共属性创建一个抽象类,并在两个实体中继承抽象类。

但这不会起作用,因为我还有一些更常见的属性,这些属性对所有实体都是通用的。所以我已经继承了所有的实体。这20个属性并不是所有实体共有的(只有两个 - 三个)。因此,我不能在现有的抽象类中添加这20个属性。

我尝试创建一个接口并实现它,但后来我忘了我需要在具体的类中实现它。因此,如果我必须在具体的课程中定义它们,那就没有帮助解决我的问题。

有什么想法吗?这样做的正确方法是什么?在不久的将来,我可能会在几个实体中拥有一些更常见的属性。那么我应该怎样做,以保持公共属性之间的一致性,而无需重新访问和重写每个实体中的公共属性?

2 个答案:

答案 0 :(得分:2)

让您的“常用设置”类继承自“公共实体”类。然后从通用设置类派生您的设置类。

class common_entity {}

class common_settings : common_entity {}

class settings : common_settings {}

class entity : common_entity {}

答案 1 :(得分:0)

也许我错了,但有时候我们往往需要太多的可重用性。

请参阅此示例代码

public class Person
{
    public string Name { get; set; }
}

public class Company
{
    public string Name { get; set; }
}

只是因为我们认为两个类共享一个Name属性,我们应该创建一个基类:

public class Entity
{
    public string Name { get; set; }
}

public class Person : Entity
{
}

public class Company : Entity
{
}

我肯定会定义一个基本实体类,因为任何实体都应该拥有一个唯一的标识符,但不能用于Name。如果实体的一个子集应该拥有Name,我将定义一个interface,它将由具体实体实现或不实现。稍后我会询问对象是否实现了给定的接口(即obj is IWhatevervar whatever = obj as IWhatever)。

顺便说一句,正如您在自己的解决方案中已经注意到的那样,虽然某些操作可能会增加代码重新存储,但这些可能会对您的设计产生负面影响。

请检查一下你说的话:

  

我有一组属性约20个,我需要两个属性   不同的实体

所以你有两个类应该实现20个属性而你只是因为你可以定义一个interface并且你需要在这两个类中实现它?

转到interface方法! Visual Studio是否具有接口实现代码生成?

认为对OOP的一个常见批评是你最终会产生更多的代码,而OOP的关键点是如果你保留你的代码,那么更多的代码并不意味着更少的可维护性 简单且易懂。这不是编码较少,而是 正确编码