我认为其他答案中解释了“正确”的方式。但我现在会根据我自己的经验来写。
在决定架构时,您必须考虑几件事情。
一个。 客户
您是否有足够的时间以“正确”的方式制作所有内容(出色的架构、测试等...)?有时客户希望快速看到结果。我们可以抱怨时间短,产品不会达到最高标准,但归根结底是我们的问题。在这种情况下,我们向客户解释他会得到什么,并编写我们都知道的意大利面条代码。
客户有什么要求(在可靠性、可扩展性、可扩展性、速度方面)?我认为这是不言自明的。有时客户会规定“正确”的方式。我们可以为客户提供“正确”的方式,但最终客户会做出决定(当然取决于时间和金钱)。
系统开发后谁来支持?我想支持一个很好的解耦代码。因此,当我编写代码时,我会尽力使其“正确”。有时我可能会将视图和控制器结合起来,或者结合一些服务并对此感到满意。知道我自己的代码很容易支持它。
b. 项目
项目的规模是多少?有些项目太小了,任何复杂的架构都没有必要。
该软件未来是否有机会快速发展(更多功能)?这是最大的挑战之一。但是,如果软件发展壮大,就意味着它是成功的。您可能会有更多的资源可以使用。重构代码并使其“正确”相对容易。
项目是否可能存在可扩展性问题?就用户和数据而言,有些项目永远不会增长。我见过一些项目试图通过使用 Oracle RAC 数据库设置来看起来很严肃,而一个简单的嵌入式数据库就可以正常工作!
您是启动该项目还是从其他开发人员手中接手该项目?这是由谁将支持该软件以及该软件将发展的问题的组合。您可能会从其他开发人员那里获得意大利面条代码。你会有时间和资源让它“正确”吗?
c。 开发团队
团队是否有足够的经验来正确解耦?当我经验不足时,我尝试编写“正确”的代码。而我失败了。关键是要真正了解您的开发团队、他们的技能和知识。不要小看这个问题。当与经验不足的开发人员一起工作时,我通常会在架构上做出一些牺牲。将做出的牺牲是我所拥有的最有根据的猜测。架构中有一些点是可以牺牲的,而有些点是不能牺牲的。通常你之前做出的一个或多个牺牲会回来咬你。
开发人员是否有编写自动测试的经验?仅有自动测试是不够的。它们应该是完整的(尽可能)并且做得正确。如果您的测试很弱,那么您最好根本没有它们。你不会想靠在满是洞的墙上。
结论:
我知道我们都想成为专业人士。作为专业人士,我们必须考虑所有事情。我们不能把时间和精力浪费在以“正确”的方式做事上。有时我们必须考虑其他因素(现实)并做出选择。最重要的是忍受它。