问题标签 [design-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
667 浏览

c++ - 支持多种持久性策略的类库

我正在开发一个包含域模型类的 C++ 类库,并且我想添加对从各种持久性机制(即数据库和文件)实例化这些类的支持。应该给类库的用户一个接口(?)来编写一个可以从/向持久性机制传输数据的类。

我知道似乎适用于 Java 的数据访问对象模式,但我不确定如何将其应用于 C++。还有其他解决方案吗?

0 投票
1 回答
332 浏览

design-patterns - 设计思考——核心控制逻辑和渲染层

我只是想看看我是否可以对我目前正在做的一些工作的设计有你的想法。

这是目前的情况 - 基本上:

  • 我正在为我们的应用程序开发一系列控件。
  • 其中一些可用于 WinForms 和 ASP.NET Web 应用程序。
  • 我一直在努力改进我的代码的测试和可测试性。

所以,这就是我所做的:

  • 在没有 UI 概念的类中创建核心控制逻辑。它只是在有关它的事情发生变化时引发事件。所有数据都存储为需要与其他对象区分开来的自定义类型对象(例如,我有一个PagingControl它拥有的地方SelectedPagePageNumber项目)。
  • 然后我创建了一个抽象类作为渲染“引擎”的接口。这可确保引擎处理使用(并可能添加)到核心逻辑的任何自定义类型。按照上面的例子,它包含一个抽象方法RenderSelectedPage
  • 然后我创建了抽象渲染引擎的具体实现(例如ConsoleRenderingEngineHtmlRenderingEngine等等)。然后,这会处理这些方法并将它们呈现给它们各自的 UI/输出。

我发现这种方法有以下优点和缺点:

专业人士

  • 有用。很好,它很容易实现一个新的渲染机制,你所做的就是子类化抽象引擎并渲染输出(它将所需的引用传递给你)。
  • 它确实将 UI 与核心代码分开,使其更容易测试
  • 显然,由于核心/渲染逻辑的封装,问题出现时很明显。

    骗局

  • 可能看起来令人困惑/臃肿。尽管每个类中没有大量代码,但有 3x 个类可以将其渲染到 1 个输出(1x 核心,1x 接口,1x 渲染器)。但是,当创建 WinForms/WebForms 控件时,它也意味着另一个类(因为需要 sublcasControl以及AbstractRenderingEngine)。

...好吧,这是我真正能想到的唯一“骗局”,也是这个问题的主要原因^_^

所以,

你对这个“模式”有什么看法?你会如何改变/改进它?


这个问题可能会随着我的更多想法而更新,或者可能需要澄清(我知道这是一个沉重的阅读!)。


更新

谢谢你们的回答,你说MVP很有趣,我以为我在某个地方看到过这样的东西,但我一生都记不起它是什么了!一看到“MVP”,我就想“该死”。:D

谢谢你们的回应。我会更多地研究 MVP,看看我是否可以进一步改进我所拥有的东西。

0 投票
2 回答
7437 浏览

linq - 使用 IQueryable 的设计模式

随着 .NET 3.5 和IQueryable<T>接口的引入,将会出现新的模式。虽然我已经看到了规范模式的许多实现,但我还没有看到使用这种技术的许多其他模式。Rob Conery 的 Storefront 应用程序是另一个具体示例,使用IQueryable<T>它可能会导致一些新模式。

IQueryable<T>从有用的界面中出现了哪些模式?

0 投票
8 回答
1299 浏览

model-view-controller - MVC 模式是描述角色还是层?

我最近读到一篇文章,说 MVC 模式描述了应用程序中的层。但就我个人而言,我看到 MVC 在应用程序中显示了几个关键角色。

您认为哪个词更适合描述 MVC 的三个主要部分,层或角色?

0 投票
3 回答
9089 浏览

c++ - 数据访问对象模式实现

我想在 C++ 中实现数据访问对象模式,但最好不使用多重继承和/或提升(我的客户不喜欢)。

你有什么建议吗?

0 投票
8 回答
2210 浏览

php - PHP中的延迟函数定义 - 可能吗?

在 JavaScript 中,您可以使用延迟函数定义来优化对函数的第 2 次 - 第 N 次调用,方法是仅在第一次调用函数时执行昂贵的一次性操作。

我想在 PHP 5 中做同样的事情,但是不允许重新定义函数,也不允许重载函数。

实际上,我想要做的是如下所示,仅进行了优化,因此第 2 次 - 第 N 次调用(比如 25-100)不需要重新检查它们是否是第一次调用。

PS 我曾考虑使用 include_once() 或 require_once() 作为函数中的第一行来只执行一次外部代码,但我听说这些也很昂贵。

有任何想法吗?还是有更好的方法来解决这个问题?

0 投票
5 回答
722 浏览

oop - 哪种设计模式最适合迭代开发?

在 TDD 或迭代模式中构建应用程序时,是否有最喜欢的设计模式?

0 投票
7 回答
1228 浏览

design-patterns - 长期 RESTful 交互

我们目前正在我的团队中进行讨论,我会对其他观点感兴趣。假设我们有一个 RESTful Web 服务,其作用是通过应用各种分析算法和服务来注释文档。清晰的基本交互:我们有一个资源,即文档集合;客户端向集合发布一个新文档,获取新文档的 URI,然后可以 GETdocURI以获取文档或 GET{docURI}/metadata以查看一般元数据,{docURI}/ne对于命名实体等。问题是一些分析可能需要很长时间才能完成。假设客户端在分析完成之前获取元数据 URI,因为它希望能够在 UI 中显示部分或增量结果。将来重复 GET 可能会产生更多结果。

我们讨论过的解决方案包括:

  • 保持 HTTP 连接打开直到所有分析完成(这似乎不可扩展)
  • 使用 content-lengthand accept-range headers 获取增量内容(但我们事先不知道最终内容会持续多长时间)
  • 为每个资源提供一个 Atom 提要,以便客户端订阅更新事件而不是简单地获取资源(如果有许多活动文档,似乎过于复杂并且可能资源匮乏)
  • 只是让 GET 返回当时可用的任何内容(但它仍然留下客户端知道我们何时完成的问题)[编辑以删除对幂等性的引用以下评论]

对于在 RESTful 架构中处理长期或异步交互的替代方法有什么意见或建议?

伊恩

0 投票
3 回答
12538 浏览

winforms - 应用程序控制器应该做什么?

我对应用程序控制器应该做什么有点困惑?因为我看到您的 MVP 模式中也存在该功能来决定单击按钮时应显示哪种形式?有没有使用应用程序控制器模式的 Windows 窗体的好例子?

MVC(控制器)和应用程序控制器有区别。我知道 MVC(控制器),我不确定应用程序控制器的职责是什么,以及它如何适合 WinForms 应用程序。Martin Fowler 也称其为 Application Controller 模式,肯定与 MVC(ontroller) 不一样吧?

0 投票
17 回答
68893 浏览

c# - A way of casting a base type to a derived type

I'm not sure if this is a strange thing to do or not, or if it is some how code smell...but I was wondering if there was a way (some sort of oop pattern would be nice) to "cast" a base type to a form of its derived type. I know this makes little sense as the derived type will have additional functionality that the parent doesn't offer which is in its self not fundamentally sound. But is there some way to do this? Here is a code example to so I can better explain what I"m asking.

I know this seems goofy but is there any way to accomplish something of this sort?