open-closed-principle相关内容
我目前正在研究OPP的设计模式.只是为了给您一些背景.这不是我第一次遇到模式.我已经编程了一段时间(大约十年),并且我对许多编程原理非常熟悉,尤其是SOLID.我主要从事Web应用程序开发,所以也许我缺少在不同编程领域可以学到的东西. 正如标题所示,我正在努力更深入地了解抽象工厂模式.我确实理解了定义以及“何时使用模式"部分,但我仍然不明白这一点.尤其是在将SOLID中的Open闭合原理添加
..
我一直在研究开放式封闭原则,这听起来不错,所以我想行使它的教s. 我考虑将新发现的知识应用到现有项目中,并立即变得有些困惑. 如果出现了新的UserType(并且很有可能),则需要对其进行更改,但尚未进行修改.谁能解决这个问题? 从我读到的内容来看,听起来应该在这里实施工厂而不是应用OCP? 违反了开放封闭原则的工厂 private void BuildUserTree(
..
我正在使用WinForms构建具有2种模式的简单测验程序: 1)编辑模式:用户可以在其中创建自己的问题 2)测验模式:用户需要回答问题的地方 当前有两种类型的问题:“打开"(问题和自由文本框)和“多项选择"(问题和4个可能的答案). 我为一个问题创建了一个抽象类: public abstract class Question { public string Q
..
我有一个简单的程序,可以根据用户提供的鼠标数据绘制几何图形. 我有一类处理鼠标跟踪的类(它获取带有鼠标移动历史的列表),另一类是处理鼠标跟踪的类. 抽象类称为Shape.从这个类中,我需要一些额外的Shapes,例如Circle,Rectangle等-并且它们中的每一个都将覆盖抽象的Draw()函数. 一切正常,但是问题出在我希望用户能够切换所需的形状时 手动.我得到了鼠标数据,我知道应该绘
..
我知道,与简单工厂相比,工厂方法的主要优点之一是它不违反开放式SOLID原则.也就是说,添加新类型时,前者不需要修改switch语句. 我希望对其中的一件事进行澄清.如果我要使用一个简单的工厂,那么我将拥有一个这样的工厂(简化): public class ObjectFactory { public static IObject CreateObject(ObjectType
..
我能想到的一个例子是模板模式,这是一种做IoC的方法,也是OCP的一个例子.因为在模板模式中 我们定义了基本算法,子类无法更改该基本算法,但可以覆盖该算法的继承步骤方法.所以将来如果我们 要更改某个步骤的实现,我们可以创建另一个子类并实现这些步骤. 还有其他例子吗? 解决方案 开放式原则建议您应该选择行为可扩展的东西,这样在需要它们做新的事情时就不必修改它们的源代码了.事情.
..
我在factory方法中面临依赖倒置的问题,它也打破了开放式封闭原则.我的代码看起来像下面的代码 public interface IWriter { void WriteToStorage(string data); } public class FileWriter : IWriter { public void
..
此问题与OCP是什么无关.而且我也不是在寻找简单的答案. 所以,这就是为什么我问这个. OCP最早是在80年代后期出现的.它反映了当时的思想和背景.令人担心的是,在已经对代码进行测试并将其投入生产之后,更改源代码以添加或修改功能最终会带来太大的风险和成本.因此,我们的想法是尽可能避免更改现有的源文件,而仅以子类(扩展名)的形式添加到代码库中. 我可能是错的,但我的印象是,当时基于网络的
..
开放式/封闭式原则指出,软件实体(类,模块等)应打开以进行扩展,但应关闭以进行修改.这是什么意思,为什么它是良好的面向对象设计的重要原则? 解决方案 具体来说,这是有关OOP中设计的“圣杯",即使实体具有足够的可扩展性(通过其单独的设计或通过其参与体系结构)无需重新编写代码即可支持将来无法预料的更改(有时甚至无需重新编译**). 做到这一点的一些方法包括多态性/继承,组成,控制反转(
..
我有以下C#代码。这里的验证保存在课堂之外,以满足开放原则。这工作正常。但挑战在于 - 验证不是通用的。它特定于员工类(例如DateOfBirthRuleForEmployee)。我如何使所有对象的通用验证(DateOfBirthRuleForAnyObject)。注意:使通用使类型无关 注意:我还有NameLengthRuleForEmployee验证。未来可能会有新的验证。
..
开放式的维基百科页面(截至今天2013-02-27)封闭原则说,它是通过继承实现的。 打开/关闭原则的名称有两种使用方式。两种方式都使用继承来解决明显的困境,但目标,技术和结果是不同的。 两种方式“是指Meyer的实现继承和更常见的多态扩展。 无论如何,我的问题是关于外墙模式,其中不使用继承。由于它以简单的界面定义了一个更复杂的子系统(或库)的抽象,这不能被视为开放原则吗?更具体
..
我深入一个新项目,我谈到了一堆模板和他们的专业化。现在,经过一天没有编程,我发现自己问是否真的值得额外的代码行。 问题是:专业化的优势是什么? / p> 这是: template class A {}; 模板 A类化合物{void foo(){/ * something * /}}; 模板类A 2, {void foo(){/ * something
..
我刚刚创建在我的班级之一下面的方法。 公共静态布尔同化(名单<卡>首先,清单<卡>第二个) { //平凡 如果(first.Count == 0 || second.Count == 0) { 返回假; } //排序名单,这样我就可以做的binarySearch first.Sort(); second.Sort(); // Copia进一步只有新
..
我的重构的一个简单的脚本文件解析器当我碰到下面的代码来了一些旧代码: StringReader读卡器=新StringReader(scriptTextToProcess); StringBuilder的范围=新的StringBuilder(); 串线= reader.ReadLine(); ,而(行!= NULL) { 开关(行[0]) { 案“$”: //过程中,整个“线”
..
我在引导程序配置Automapper,我称之为引导()在的Application_Start(),和有人告诉我,这是错误的,因为我每一次我一定要添加一个新的映射来修改我的引导程序类,所以我违反了开闭原则。 你怎么想,我真的违反这个原则? 公共静态类引导程序 { 公共静态无效的自举() { ModelBinders.Binders.DefaultBinder =新
..