Questions tagged «design-patterns»

设计模式是解决软件设计中常见问题的通用可重用解决方案。当您对设计模式的实现有疑问时,请使用此标签来提问。请不要在有关文本模式匹配的问题上使用此标签。当在实现上遇到重磅问题时使用此标记-标记实现所使用的代码语言。

25
学习/实施设计模式(针对新手)
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我是一个迷茫的新手和业余程序员,试图掌握这一点,所以请原谅我的问题有点小或没有太大的意义。 我看到很多关于SO的问题都围绕着设计模式的使用,我想知道是否有人拥有学习和实现设计模式的良好资源?我了解一般的想法,并且知道如何/何时使用其中的几个(Singletons,Factory方法),但我知道我错过了。 (只要有关系,我的首选语言是C#,但我可以从其他语言的示例中学到)

22
什么时候应该使用单例模式而不是静态类?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 在决定使用单例还是静态类时,请列出设计注意事项。在执行此操作时,您被迫将两者进行对比,因此可以提出的任何对比也都有助于显示您的思维过程!此外,每个面试官都喜欢看示例性例子。:)

14
为什么应将域实体与表示层隔离?
域驱动设计的一部分似乎没有很多细节,它是如何以及为什么应将域模型与界面隔离的。我试图说服我的同事,这是一个好习惯,但是我似乎并没有取得太大进展。 他们在表示层和界面层中随便使用领域实体。当我向他们争辩说他们应该使用显示模型或DTO来将Domain层与界面层隔离时,他们反驳说在这样做时他们看不到商业价值,因为现在您需要维护一个UI对象以及原始域对象。 所以我在寻找一些具体的理由来支持这一点。特别: 为什么我们不应该在表示层中使用域对象? (如果答案很明显,那就是“解耦”,那么请解释一下为什么在这种情况下如此重要) 我们是否应该使用其他对象或构造将我们的域对象与接口隔离?

3
编写成就系统的最佳方法
我正在考虑设计一种在我的网站上使用的成就系统的最佳方法。数据库结构可以以最佳方式找到,以告知缺少的3个或更多连续记录,并且该线程实际上是从开发人员处获得想法的扩展。 我在这个网站上经常谈论徽章/成就系统时遇到的问题就是-都是谈论而没有代码。实际的代码实现示例在哪里? 我在这里提出一种设计,希望人们可以做出贡献,并希望为编码可扩展成就系统创建一个好的设计。我并不是说这是最好的,远非如此,但这是一个可能的起点。 请随时贡献您的想法。 我的系统设计思路 似乎普遍的共识是创建一个“基于事件的系统”-每当发生已知事件(如创建,删除帖子等)时,它都会像这样调用事件类。 $event->trigger('POST_CREATED', array('id' => 8)); 然后,事件类找出此事件正在“侦听”哪些标志,然后找到requires该文件,并创建该类的实例,如下所示: require '/badges/' . $file; $badge = new $class; 然后,它将调用默认事件,以传递调用时接收到的数据trigger。 $badge->default_event($data); 徽章 这才是真正的魔术发生的地方。每个徽章都有自己的查询/逻辑,以确定是否应授予徽章。每个徽章的格式如下: class Badge_Name extends Badge { const _BADGE_500 = 'POST_500'; const _BADGE_300 = 'POST_300'; const _BADGE_100 = 'POST_100'; function get_user_post_count() { $escaped_user_id = mysql_real_escape_string($this->user_id); $r = mysql_query("SELECT COUNT(*) …

15
adapter-任何真实的适配器模式示例
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 13天前关闭。 改善这个问题 我想向我的团队演示适配器模式的使用。我已经在线阅读了许多书籍和文章。每个人都在举一个例子,它对理解概念(形状,存储卡,电子适配器等)很有用,但没有实际案例研究。 您能否分享一下适配器模式的任何案例研究? ps我尝试搜索关于stackoverflow的现有问题,但没有找到答案,因此将其发布为新问题。如果您知道已经有了答案,请重定向。

8
外立面与调解员
我一直在研究这两种模式之间的差异。 我知道,facade封装了对子系统的访问,而mediator封装了组件之间的交互。 我知道子系统组件不了解外观,而组件显然不了解介体。 我目前正在使用外观来封装检索配置信息的方法,例如App.Config,存储在SQL中的用户设置,程序集信息等,以及用于在不同Windows窗体之间导航的介体。 但是,大多数站点都指出中介程序是“添加功能”。这是什么意思?调解员如何添加功能?


8
需要实现Virgil Dobjanschi REST实现模式的示例Android REST Client项目
我想在Android手机上构建REST客户端。 REST服务器公开了多个资源,例如(GET) http://foo.bar/customer List of all customer http://foo.bar/customer/4711 The customer with id 4711 http://foo.bar/customer/vip List of all VIP customer http://foo.bar/company List of all companys http://foo.bar/company/4711 The company with the ID 4711 http://foo.bar/company/vip List of all VIP companys 我(认为)我知道如何与REST服务器对话并获取所需的信息。我将使用这样的API实现REST Client类 public List<Customer> getCustomers(); public Customer getCustomer(final String id); public List<Customer> getVipCustomer(); …

6
同步客户端-服务器数据库
我正在寻找一些通用策略,用于将中央服务器上的数据与并不总是在线的客户端应用程序进行同步。 在我的特定情况下,我有一个带sqlite数据库的android手机应用程序和一个带MySQL数据库的PHP Web应用程序。 用户将能够在电话应用程序和Web应用程序上添加和编辑信息。我需要确保即使手机无法立即与服务器通信,在一个地方所做的更改也会在所有地方反映出来。 我不关心如何将数据从手机传输到服务器,反之亦然。我之所以仅提及我的特定技术,是因为我无法使用例如MySQL可用的复制功能。 我知道客户端-服务器数据同步问题已经存在很长时间了,并且希望获得有关处理问题的模式的信息(文章,书籍,建议等)。我想了解处理同步以比较优点,缺点和折衷方案的一般策略。


11
IntelliJ中的生成器模式代码生成
有什么方法可以自动在IntelliJ中编写Builder模式? 例如,给定这个简单的类: class Film { private String title; private int length; public void setTitle(String title) { this.title = title; } public String getTitle() { return this.title; } public void setLength(int length) { this.length = length; } public int getLength() { return this.length; } } 有没有一种方法可以让IDE生成此代码或类似代码: public class FilmBuilder { Film …

4
哪些设计模式可以应用于配置设置问题?
在大型和复杂的软件产品中,管理可配置设置成为主要难题。我见过的两种解决方法是: 让系统中的每个组件从配置文件或注册表设置中加载其自己的配置。 有一个设置加载程序类,该类加载所有可配置的系统设置,并让每个组件向设置加载器查询其设置。 这些方法对我来说都是错误的。 有没有可以用来简化问题的设计模式?也许可以利用依赖注入技术。


9
全局还是单例用于数据库连接?
在PHP中使用单例而不是全局的数据库连接有什么好处?我觉得使用单例而不是全局会使代码不必要地变得复杂。 全局编码 $conn = new PDO(...); function getSomething() { global $conn; . . . } 用Singleton编码 class DB_Instance { private static $db; public static function getDBO() { if (!self::$db) self::$db = new PDO(...); return self::$db; } } function getSomething() { $conn = DB_Instance::getDBO(); . . . } 如果除了全局或单例之外,还有一种更好的初始化数据库连接的方法,请提及它并说明它比全局或单例具有的优势。

11
将DTO映射到域对象的最佳实践?
我已经看到了许多与将DTO映射到域对象有关的问题,但是我不觉得它们回答了我的问题。我以前使用过很多方法,也有自己的见解,但我正在寻找更具体的东西。 情况: 我们有很多领域对象。我们使用CSLA模型,因此我们的域对象可能非常复杂,并且它们包含自己的数据访问权限。您不想通过导线传递这些信息。我们将要编写一些新服务,这些服务将以多种格式(.Net,JSON等)返回数据。由于这个原因(和其他原因),我们还创建了一个精益的数据传输对象,以在线上传递。 我的问题是:应该如何连接DTO和域对象? 我的第一个反应是使用Fowler DTO模式类型的解决方案。我已经看过很多次了,这对我来说感觉很对。域对象不包含对DTO的引用。调用外部实体(“映射器”或“汇编器”)以从域对象创建DTO。通常,在域对象方面有一个ORM。不利的一面是,“映射器”在任何实际情况下都变得极其复杂,并且可能非常脆弱。 提出的另一个想法是域对象“包含” DTO,因为它只是一个精益数据对象。域对象属性将在内部引用DTO属性,如果需要,可以仅返回DTO。我看不到任何问题,但感觉不对。我看过一些文章,其中使用NHibernate的人们似乎使用这种方法。 还有其他方法吗?以上方法之一值得使用吗?如果可以,为什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.