目前,我正在开展针对幼儿园,小学和高中的C#“学校系统项目”。为此,我创建了三个不同的项目,这些项目实际上具有与自定义功能类似的类。
问题在于每次我修改一个类(主要是由于bug和新功能),我都需要更新这三个项目中的类似类。
现在,我开始意识到我的设计模式应该比这更好。对于我的类型的项目,他们共享具有自定义功能的类似类别的行业标准是什么?我应该考虑创建所有可以使用的库类,还是有更好的选择?
答案 0 :(得分: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; }
}
您还可以使用抽象和虚拟方法和属性来定义应该或可以覆盖的基本行为。
这样,您将只有一个库定义域对象(只是您使用的所有实体,如学校,学生,教师等)和行为。无论何时你需要改变一些东西,你只需要在这个单独的库上运行。
您还可以检查一些设计模式,例如访客和工厂方法,以便您的新架构设计清晰。
答案 1 :(得分:1)
处理常量结构微小变化的两种基本设计模式是
模板方法和策略
它们仅在技术层面上有所不同,但有着共同的原则 - 分享可能分享的内容,并且仅在差异发生时有所不同。
答案 2 :(得分:0)
我会研究抽象工厂模式。
你可以看到它的例子here。
答案 3 :(得分:0)
当您尝试修改类时,错误会引发。因此,您必须在课堂设计中实施SOLID原则。特别是单一责任,开放/封闭,接口隔离和依赖性倒置/ IOC。 您可以阅读以下文章了解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
在业务逻辑中,您将使用基于您的逻辑的模式,例如您可以使用工厂方法模式的多个相同逻辑,必须适应多个类,您可以使用适配器类,发送任何通知,您可以使用观察者模式等< / p>
答案 4 :(得分:0)
因为你说某些类在三个项目之间是通用的,所以你在这三个项目中分别使用它们。现在,只要您想对这些公共类进行更改,就需要对这三个项目进行更改。
它肯定要求遵循设计原则(OO原则)。
“封装变化的内容”
提取这三个项目之外的所有常用类,如果它有多个类(如实用程序项目),则将它们保存在单个类或单个项目中。然后在所有三个项目之间共享该实用程序项目。
现在在公共类中添加任何新功能或修复错误。它改变了一个地方。