【发布时间】:2014-06-18 06:55:12
【问题描述】:
我所在的开发团队编写并仍然维护着一个纯 Java 意大利面条代码的代码库。其中大部分是在我加入这个团队之前实施的。
我的背景是 Python/Django 开发,而 Django 社区非常强调“可插拔性”——Django“应用程序”(模块)的一个特性,主要意味着“一件事和一件事好”、可重用性、松散耦合,以及一个干净、有意识的 API。一旦我曾经工作过的 Django 团队开始“理解它”,我们几乎可以零问题地处理凌乱、紧密耦合的大量单体代码。
我们的实践涉及在我们打算使用该应用程序的 Django 项目之外开发 Django 应用程序(根据我收集的信息,这是 Django 开发人员的一种常见做法)每个人甚至都生活在一个独立于整体的 Git 存储库中Django 项目。
现在,我们有机会重构大部分意大利面条式代码,在我看来,我从 Django 社区学到的一些东西应该在这里应用。简而言之,我希望看到我们的新代码库开发为一系列“可插拔”模块,每个模块都是在假设它无法访问其他模块(除了它应该合理依赖的模块之外)的情况下编写的。我相信这应该可以很好地将正确的软件设计的基本原则推广到整个团队。
所以,我提倡的是在我们的新(Spring)项目中为每个我们想要的“功能”拥有一个单独的存储库。每个都有自己独立的构建过程,结果将是一个 .jar 。我们还有一个项目级事物(JSP、静态文件等)的存储库,它的构建过程会产生一个 .war 。 .jar 不会放在 .war 中,而是被视为 Gradle 依赖项(与第三方依赖项相同。)
现在我必须把它卖给老板。他被要求提供该计划的先例示例。显而易见的地方是开源项目,但如果一个项目被拆分为多个存储库,它很可能是多个项目。所以,也许我正在寻找某种套件。作为一个例子,Spring 本身看起来很有希望,但我找不到很多其他的。
我的问题是(对于冗长的背景故事感到抱歉):
- 有没有这样的先例?
- 有哪些例子?
- 是否有任何文档(即使只是一篇博文也会有所帮助)提倡这样的事情?
- 对实施此有什么建议吗?
- 这是个好主意吗?
提前致谢!
编辑:是否重构不是问题。我们已经决定对我们的大部分代码进行一些大刀阔斧的修改——事实上,主要不是为了“让它更干净”。我的问题是我们计划的项目结构是否合理,以及如何向决策者证明其合理性。
【问题讨论】:
-
不要重构,继续支持意大利面的东西;)任何人都可以重构,意大利面只适合真正的男人。
-
是否重构目前尚无定论。已经决定了。我们新项目的目标之一是消除对旧版本 Struts 的依赖,并根据需要转换所有代码以改用 Spring。
-
这在语义上所说的是重写。您使用的术语 refactoring 与您所描述的不同。不理解语义的人被卖了一座桥,当它严重失败时会生气,这是这些事情结束的唯一方式。
-
从头开始实施一个新项目来替换现有项目也是重写。那些失败的更惨,谷歌“大改写”并阅读了这一点。 无论哪种方式,这个问题大多是题外话,太宽泛,太自以为是答案证明了这一点,包括我的!
-
JSF 不是答案,唯一推动 JSF 的人是顾问,他们希望将他们的客户锁定在一个昂贵而复杂的解决方案中,他们需要不断的帮助,哦,我多么希望我能拒绝 cmets !
标签: java