2009-08-24 108 views
5

将开发项目(如ASP.NET MVC应用程序)拆分为多个项目的常见原因是什么?代码组织也可以通过文件夹完成。多个项目倾向于产生循环引用冲突,并且通过必须管理/解决这些冲突而增加复杂性。将项目拆分为多个项目的原因?

那么,为什么?

回答

3

一种可能性是有一个系统,给定组(或单显影剂)可在代码的其余部分的独立工作的。另一个是将系统其余部分需要的常见实用程序代码分解出来 - 例如错误处理,日志记录和常用实用程序。

当然,只是想在一个特定的函数/类/文件,其中的边界是艺术的问题,而不是科学所发生的时候。

0

拥有一件事。如果你有开发人员负责代码库的不同部分,那么分裂项目是自然而然的事情。人们也可以通过功能来分割项目。这减少了冲突和复杂性。如果增加,那只意味着缺乏沟通,你只是做错了。我能想到的

+0

这使得代码所有权更加排他,我认为这是一件坏事。独占代码所有权需要更多的沟通(如您所述),沟通总是很难获得。它还需要更多的合作(如果我需要更改代码,现在自己做起来更难),这也很难实现。在这种情况下,一个不好的团队成员可以为每个人做好准备。 – Imagist 2009-08-24 05:47:44

1

一个例子是,你可能会在发展,你最终开发这可能是更普遍的使用,这不愧是自己的项目库一个项目找到。例如,也许你正在制作一个视频游戏,并且最终你会写一个音频库,但它绝不是专门与游戏项目相关联的。

5

部分原因是

封装 - 通过包装一组例程的另一个库中,无论是作为一个静态库或一组DLL的,它变成一个黑盒子。因为它是一个很好的黑匣子,所以你需要做的就是确保你给出正确的输入并获得正确的输出。它有助于您重新使用该库。它还强制执行某些规则和防止黑客编程(“嗯...我就作出这样的成员函数公共现在”)

减少了编译时间 - 磁带库已遵从;你不必在编译时重建它,只需链接它(假设你正在执行C++)。

解耦 - 通过包住你的类到一个独立的库,可以减少耦合,可以重复使用其他目的的库。同样,只要库的接口不变,您可以对库进行所有更改,而链接到库或引用它的其他人则根本无需更改其代码。 DLL在这方面很有用,不需要重新编译,但如果许多应用程序安装不同版本的相同DLL,可能会很棘手。您可以更新库而不会影响客户端的代码。虽然您可以对文件夹执行相同的操作,但没有明确的机制来强制执行此操作。

此外,通过实施具有不同图书馆的这门学科,还可以确保你所写的内容是通用的,从实现分离。

许可/商业化 - 嗯,我认为这是很明显的。

1
  1. 代码重用。假设您有项目A,并且您启动了一个新的项目B,它具有许多与项目A相同的功能。将A的共享部分拉出并使它们成为可供A和B使用的库这允许你在两个地方都有代码,而不必在两个地方维护相同的代码。

  2. 代码重用,倒置。假设您有一个在一个平台上运行的项目。现在你想让它在两个平台上工作。如果可以分离出与平台相关的代码,则可以为每个依赖于平台的库启动不同的项目,然后使用不同平台的不同库编译中央代码库。

+0

为什么downvotes? – Imagist 2009-08-24 05:52:09

1

不是质疑多个组件中代码的价值,而是质疑在一个地方聚集所有代码的价值。

你会把你的厨房里的东西放在一个柜子里吗?

循环引用是循环引用,无论它们是在程序集之间还是在它们之间发生。违规组件的设计很可能是次优的;通过装配避开组织可以讽刺地阻止编译器为你检测情况。

我不明白你可以像使用项目一样对文件夹组织代码。如果那是真的,我们的操作系统就不会有独立驱动器的概念;他们只会有一个巨大的文件夹结构。高阶组织模式表达与简单文件夹不同的意图。

项目说“这些概念是密切相关的,只与其他概念有关。”

+0

你是对的;我只是遇到很多循环引用(在这个问题中描述:http://stackoverflow.com/questions/1320561/resolving-circular-references-c)这似乎使项目分离非常乏味,或者我正在做一些我没有意识到(并希望从中吸取教训)的巨大设计错误。 – Alex 2009-08-24 05:51:02

+0

为关联的问题添加了答案。 – 2009-08-24 06:04:05

0

这里有一些很好的答案,所以我会尽量不重复。

将代码分解到自己的项目的一个好处是在多个应用程序之间重新使用程序集。

我喜欢上面提到的功能性方法(例如库存,运输等都可以获得自己的项目)。另一个想法是考虑部署模型。层,层或服务器之间共享的代码可能应该在它自己的通用项目中(或者如果期望更好的控制,则可以是项目集合)。专用于某个层级的代码可能在其自己的项目中。例如如果您有单独的Web服务器和应用程序服务器,那么您不希望在应用程序服务器上部署UI代码。

拆分的另一个原因可能是一旦应用程序在生产中就允许小型增量部署。假设您遇到需要修复的紧急生产错误。如果小改动需要重建整个(一个项目)应用程序,那么您可能很难对质量保证小测试周期进行调整。如果您只部署一个具有较小功能集的程序集,则可能会更容易销售。