8

我正在创建一个应用程序,它将解析 MSDN 文章的元信息,例如文章标题和同一集合中的其他文章。这个应用程序还有一个 GUI 前端。

我有兴趣通过将前端与后端和后端分成两部分来使这个程序更加模块化——一个处理 HTML 文档的检索和一般解析,另一个处理更具体的与 MSDN 本身相关的解析。其想法是,这将允许自定义 UI 被添加到后端,并允许应用程序能够通过插入不同的 DLL 来解析其他站点(可能是 Google 搜索结果)。

我的理解是,您通常会创建 DLL 以在不同的应用程序之间共享代码。但是,在这种情况下,我只是在为这个特定的应用程序寻找模块化。在这种情况下创建 DLL 是否仍然合适?或者我应该考虑一个不同的选择,比如把所有的类一起放在一个程序集中?

我应该注意,我对编程比较陌生,所以即使答案是“否”,这仍然是我学习的一个很好的练习。如果是这样的话,我想知道是否应该修改这个练习以使其更合适。

4

3 回答 3

7

我认为您在这种情况下使用 DLL 的想法是个好主意。使用 DLL 没有明显的额外成本(最多可能会多一点启动成本)。即使您目前只计划在这个应用程序中使用它们,仍然计划未来的更改也没有什么坏处。如果需要,DLL 可以在另一个应用程序中使用很少或无需修改的情况下总是很有可能。

此外,将其拆分为单独的 DLL 以实现模块化甚至可能有助于设计和开发过程。它使“共享”全球数据变得更加困难(这可能是一件好事)。如果一切都在一个单一的组件中,那么可能会有一些趋势只是从其他地方获取一些数据。如果该数据存在于另一个程序集中,那么这种潜在的不良做法就不太可能发生。它可能会迫使开发人员重新考虑如何解决问题。

于 2010-08-17T22:36:44.383 回答
1

DLL 可以帮助维护您的应用程序。如果您有未来的更新和/或错误修复,您可以更新特定的 DLL,而不是整个应用程序。这也将有助于减少您的测试表面积。

在开发过程中,存根某些类/DLL 并在开发后交换实际的 DLL 也会更容易一些。

我不会发疯,将每个类都放在自己的 DLL 中。从高层次来看,应该有一个明确的类应该放在一起。

于 2010-08-17T23:15:33.447 回答
1

制作 DLL 有几个优点:

  • DLL 可以独立于调用程序(前端)进行更改
  • DLL 可以自己分发,独立于调用者问题(前端)
  • 如果多个同时运行的软件使用相同的 DLL,则内存占用会更小

它也带来了成本:

  • 你不能使用简单的继承方案来扩展 DLL 类
  • 共享全局数据仍然是可能的,但更加困难(有人可能会说这会迫使设计更好,但这仍然是一个限制)
  • 包含在 DLL 中的代码的单元测试更加困难
  • 有安装问题(dll必须放在特殊的地方并注册,取决于你如何使用它)

但关于模块化的要点是 DLL 仍然是一半的措施。即使我们忽略成本,它也不比一个库好多少,甚至只是重用现有的类。主要优势在于经销商,而不是真正的软件开发人员,除非您期望第三方贡献者。并且被调用的函数仍然在与主程序相同的进程中运行。

如果你想要一个真正干净的模块化,你可以使用一个真正的多层架构,前端和后端有单独的进程,它们之间有一个通信层(比如 TCP 套接字)。这通常更通用、更健壮,并且在项目生命周期的早期完成时不会变得更复杂。

于 2010-08-17T23:22:54.420 回答