软件设计
我正在阅读维基百科上的设计模式页面。更具特色的“批评”部分。你可以指点一些关于设计模式缺点的文章或书籍吗? 解决方案 大多数对我设计模式的批评遇到了与他们认为只是良好的面向对象实践的结构和标签的厌恶。大多数模式归结为编程接口和其他SOLID原理。感觉是,当我们教授模式时,我们会使开发人员,特别是初级开发人员试图将所有问题都集中到他们所学到的一系列模式中,这可能会产生比这更加“直接”的更加棘
..
我一直在找到自己使用责任链模式在我目前的项目中,我经常会遇到3次,我想知道我是否对这个解决方案有一点过分的热情。具体来说,我一直在使用Apache Commons 链接项目。所以,我已经非常深刻的印象了如何将一些复杂的可互换的应用程序逻辑简化成一个更加凝聚和有组织的整体。然而,这个项目中的一些较新的人似乎很难“得到它”。你有什么经验?在实现过程中遇到什么问题? 到目前为止,我注意到只有当您尝
..
这两种模式似乎都是一样的。现实世界中的不同用例是什么? 谢谢 解决方案 单身经常是可变的。这是不可能的一个flyweight。例如。一个flyweight可能代表一种颜色。如果您创建了一个红色,它是令人困惑的,而且它是绿色的,因为它的底层flyweight对象在代码中的其他地方更改为绿色。 另外我会说一个单身是一种轻量级的子模式。你可以想到单个颜色对象是单身,但它们都是使用工厂选择
..
我一直在阅读,当您尝试在项目中实施单元测试时,静态方法,静态类和单例是恶意的。当遵循TDD范式时,我应该忘记它们是否存在,并且永远不会再使用它们,有时候可以使用它们。 解决方案 不要说永远不会 - 静态类和方法在你的工具箱中占有一席位。 那就是说,如果你试图隔离和测试的类测试或SUT)取决于静态类或方法,您将无法编写将SUT与静态依赖关系隔离的测试 - 当测试代码运行时,仍将使用静态
..
我相信我不是唯一面对这个问题的人,而是到现在为止我找不到解决方案。问题如下。 我已经发布了一个Web服务(我没有任何控制,我不能改变它)从遗留系统和所有的客户端都在使用它。我收到来自Web服务和对象的请求,我得到的是一个非常复杂的,但为了一个例子让我说我从Web服务调用接收对象A,其中包含其他对象,如对象B,其中的对象C等;此外物体B& C还有一些原始数据类型以及其他一些对象。我的问题是,我
..
我的当前应用程序允许用户通过一组管理屏幕定义自定义Web表单。它本质上是一个EAV类型的应用程序。因此,我不能硬编码HTML或ASP.NET标记来呈现给定的页面。相反,UI从服务层请求一个Form对象的实例,后者又使用几个RDMBS表构造一个实例。表单包含您希望在这样的上下文中看到的类的类型:表单 => IEnumerable = > IEnumerable
..
我刚刚真的真正地琢磨依赖注入和装饰设计模式的奇迹,并且在整个地方使用它。 尽管如此,我一直困难的一件事是命名我的装饰课程,所以我只想知道别人做什么。你总是附加“装饰”这个词吗?您是否加入了其装饰的界面名称?他们有自己的命名空间吗? 你们做什么? 解决方案 我避免使用设计模式名称。我认为这在任何地方都属于文档。在其所做或代表的作用之后命名装饰器类/功能。它装饰或桥接或链接或代理或
..
嗨,我是Kotlin世界的新手。我喜欢我到目前为止看到的,并开始考虑将我们在Java应用程序中使用的一些图书馆转换为Kotlin。 这些图书馆充满了Pojos与设定者,getter和Builder类。现在我已经google了,找到什么是在Kotlin中实现Builders的最好方法,但没有成功。 第二次更新:问题是如何编写一个Builder设计模式在科特林有一些参数的简单pojo?下面
..
我试图弄清楚我对于其他演员的使用情况并不是一种反模式。 我的系统中有几个演员。有些是长寿命的( restClientRouter ,发布者),有些死后,他们完成了工作( geoActor )。短命的演员需要向长期的演员发送消息,因此需要他们的 ActorRef 。 //路由器为一堆其他演员 val restClientRouter = createRouter(context.
..
工厂方法与抽象工厂设计模式有什么区别?我对这两者感到困惑。抽象工厂是否使用工厂方法来实现? 请提供一些有形的例子。 解决方案 来自于对象实例化是重要的事情,不应该分散代码,而应该从集中位置进行更多的控制; 工厂方法只是服务于上述目的 ControlFactory { public Button GetButton(){return new Button();}
..
我想知道我们是否可以将设计模式应用于编写货币转换代码,如果是,那么它们会是什么?假设转换率是静态的,我们可以对它们进行硬编码。 我想到了使用“状态模式”,其中每个状态代表一个特定的货币,并且封装了公式转换成相应的方法,例如'toDollars()','toPounds()'等。 另一种可能性(不确定是否是设计模式)使用从特定货币转换为的功能对象另一个,并将它们作为值存储在2级Hasht
..
WPF的MVVM设计模式中的Model,View和ViewModel对象的基本定义是什么? 解决方案 型号: 表示数据。 实体。 > 模型类是封装应用程序数据和业务逻辑的非可视化类。 他们负责管理应用程序的数据,并通过封装所需的业务规则和数据验证逻辑来确保其一致性和有效性。 模型类不要直接引用视图或查看模型类,并且不依赖于如何实现。 模型类通常通过 INotifyPro
..
看起来像我所使用的每个项目都使用模型视图控制器架构,这就是我自己的项目。有办法吗创建具有持久存储和用户界面的应用程序又如何? 解决方案 MVC 已经有一段时间了。这是经过时间测试和验证的模式。许多框架利用了 MVC模式。 Martin Fowler已将MVC解构为:监督演示者和被动视图。 架构师 Christopher Alexander 说最好的: 每个模式都描述了一个问题,
..
请看下面的代码: 公共课A 公开person1 As Person 结束类 公共类B 继承A 公共函数CheckGender()As Boolean 如果person1._Gender =“M”然后 CheckGender = True 如果 结束函数 结束类 公共类C 继承B 公共函数CheckAge()As Boolean 如果person1._Age
..
它们之间是否有区别,而不是通过键设置和获取数组中的对象? class Registry { private $ container = array(); public static function Set($ name,$ object){ self :: $ container [$ name] = $ object; } public static function
..
关于如何开发能够适应不断变化的业务需求的软件的想法?任何模式,架构等可能有一些轶事的例子将是巨大的。这更像一个调查,而不是一个具体的问题。感谢 解决方案 您将想要了解更多关于整个敏捷开发动作。敏捷只是它所说的:能够快速适应。 Robert C. Martin的2002年的书 - 一个经典的。 敏捷在C# - 这是我使用的 查看此书籍清单 想阅读敏捷宣言! 再一
..
我刚刚阅读了这篇文章和它确实混淆了我很多。 其次,这个模型允许我们最小化使用GWTTestCase,它依赖于浏览器的存在,我们的代码,编写轻量级(和快速)JRE测试(不需要浏览器)。 [1] 这是整体的好处,我从遵循这种设计模式?似乎使代码更复杂...你使用这种模式? 解决方案 我不得不不同意,MVP使代码方式不那么复杂,特别是在GWT的情况下。如果您计划中型到大型GWT项目,
..
在之前的工作中,我的经理建议使用翻译器模式将数据从DataTable转换为对象。基本上,Translator类只有静态(即类)方法,所以它是函数调用的聚合。我的初始方法是为每个对象实现构造函数,该对象可以将DataTable行作为参数,并创建一个与数据对应的实例。 他说,已被Microsoft提出,提供了更好的代码模块化。我可以看到这一点,但同时它似乎是一种非OO方法(尽管访客模式有类似的特
..
DAO模式和数据映射模式之间有区别吗? DAO只是数据映射器之一吗? 解决方案 我实际上不会调用DAO“模式”。正如我看到的那样,DAO几乎是一个数据访问对象“,它封装了访问持久数据存储的细节,一般来说与数据库无关: 接口IBlogDaoService { 博客GetBlog(long id); void SaveBlog(博客博客); } 很明显,实现可
..
我想创建一个WCF服务。这样做最好的设计模式是什么? 例如三个这样分开的项目: 1)DataContract 2)BusinessLogic 3)SvcHostProject 解决方案 这听起来不太好,尽管我可能会将DataContract和SvcHostProject组合起来,引用WCF二进制文件,并且似乎具有相同的粗粒度责任(即,除非您正在考虑创建通用Service
..