0

目前,我正在为幼儿园、小学和高中定制一个 C#“学校系统项目”。为此,我创建了三个不同的项目,它们实际上具有具有自定义功能的相似类。

问题是每次我必须修改一个类(主要是由于错误和新功能),我都需要更新三个项目中的那些相似类。

现在,我意识到我的设计模式应该比这更好。对于我的类型的项目,它们共享具有自定义功能的相似类的行业标准是什么?我应该考虑创建所有人都可以使用的库类还是有更好的选择?

4

5 回答 5

1

处理常量结构微小变化的两种基本设计模式是

模板方法策略

它们仅在技术层面上有所不同,但具有共同的原则——共享任何可能共享的内容,并且仅在出现差异时才有所不同。

于 2013-08-28T09:44:38.533 回答
1

创建一个库,定义一个具有通用属性和功能的基类 School。

public abstract class School
{
    public string Name { get; set; } // common property for each school

    public int GetStudentCount() // common method for each school
    {
    }
}

然后为您的每所学校定义儿童班级,并指定其他学校没有的他们的行为。

public class Elementary : School
{
    public string SomethingSpecial { get; set; }
}

您还可以使用抽象和虚拟方法和属性来定义应该或可以被覆盖的基本行为。

这样,您将只有一个库来定义域对象(只是您使用的所有实体,例如 School、Student、Teacher 等)和其他行为。每当您需要更改某些内容时,您只需对这个单一的库进行操作。

您还可以检查一些设计模式,例如访问者和工厂方法,以便您的新架构设计清晰。

于 2013-08-28T08:34:20.777 回答
0

因为您说某些类在三个项目之间是通用的,并且您在所有这三个项目中分别使用它们。现在,每当您想对这些公共类进行更改时,您都需要在所有这三个项目中进行更改。

它肯定需要遵循设计原则(OO原则)。

“封装变化的东西”

提取这三个项目之外的所有公共类,如果它有多个类,则将它们保留在单个类或单个项目中,例如实用程序项目。然后在所有三个项目之间共享该实用程序项目。

现在,在公共类中添加任何新功能或修复错误。它是一个地方的变化。

于 2013-08-29T15:31:45.893 回答
0

我会研究抽象工厂模式。

你可以在这里看到它的例子。

于 2013-08-28T08:40:02.220 回答
0

当您尝试修改您的类时会出现错误。所以你必须在你的课堂设计中实现 SOLID 原则。特别是单一职责、开放/封闭、接口隔离和依赖倒置/IOC。您可以阅读以下文章了解 SOLID 原理(如果您对 Solid 没有足够的了解) http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife

然后介绍数据访问的存储库和工作单元模式 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work -patterns-in-an-asp-net-mvc-application

在业务逻辑中,您将使用基于您的逻辑的模式,例如多个相同的逻辑,您可以使用工厂方法模式,必须适应多个可以使用适配器类的类,发送任何通知,您可以使用观察者模式等。

于 2013-08-28T09:18:30.460 回答