![]() |
1
3
给定问题的正确架构完全取决于问题。你的问题太笼统了,无法给出一个真正的答案,而不是说我尽可能地保持架构的简单,以考虑所有已知的和预期的需求,但并不简单。 编辑: 对于“典型”业务解决方案,以下是我考虑的一些因素:
|
![]() |
2
2
好吧,让我来告诉你——简单地做吧。专注于您现在拥有的任何需求,但不要试图解决所有可能的未来特性、虚构的需求变更和各种开发过程。 乔尔写了一篇很棒的文章: Don't Let Architecture Astronauts Scare You . 分析您拥有的任何需求,您的软件需要的任何特性,看看您以前在类似项目中的经验,然后开始它。 一个伟大的建筑永远不会从第一次脑风暴中诞生。你从一个方法开始,随着天气的变化调整你的路线,进行代码审查会议,这些会议将产生改进体系结构的想法,将一些不好的代码片段重构成好的和可重用的组件,最后你的车库将变成一座城堡。 跟随 KISS principle 避免过早优化。
当然。个人或团队开发自己的风格、解决典型问题的技术、可重用组件,这些都将构成您的工具集。为什么每次你开始一个新项目时你都要扔掉它们?
我试着去做。它服务于一致性、干净结构和关注点分离的目标。
那也是一样。可能有不同的方法来解决问题并以最有效的方式解决它。 |
![]() |
3
1
我不明白这部分问题。
我很幸运,几乎所有的工作都是在小团队中完成的,而不幸的是,几乎所有的工作都是在高营业额的团队中完成的。我学会了 永远不要试图独自构建一个系统 ;团队合作的结果更好。有时我们已经完成了快速原型设计,但是如果团队表现出色,我发现您可以用白板、索引卡和纸设计实现令人惊讶的目标。 我们肯定会的 不 有一个一致的项目设计;每个架构可能是项目的一次性,但我几乎只在研究和高级开发中工作。 考虑因素:
|
![]() |
4
1
我发现预先假设性能瓶颈通常是非常糟糕的做法。你可以花费大量的前期优化,最终没有明显的区别。 现在我们有一些很好的重构工具和很多关于开发模式的资源。因为这些工具已经变得更好了,所以我没有像以前那样花太多时间在架构功能上。我的流程大致如下:
如果你以这种方式工作,你会发现你犯了简单的错误。模式、第三方工具等在解决特定问题方面非常棒,但我想记住,每次添加类似的内容时,都会提高以后维护应用程序所需的理解水平。所以我开始时很简单,只有当它特别为我带来一些东西时才会增加复杂性。 当我与其他架构师打交道时,我实际上尝到了一种相当糟糕的滋味,这些架构师即使是一个小的、简单的应用程序,也会接触到依赖注入框架、nhibernate、nunit、滚动自己的日志库、编写3倍多的单元测试(因为它们有代码行)等。所有这些工具都有特定的实例,其中ROI(返回在投资方面,“一掷千金”是非常好的,而在其他情况下则不然。一个好的架构师以尽可能低的时间/成本提供尽可能多的价值。 |
![]() |
5
1
我的观察是,真正优秀的架构师需要花时间深入理解已知的需求,并在理解未来灵活性的提供方面运用相当大的判断。 他们还了解层的逻辑和物理分离之间的区别。 我经常看到两种模式之一:
(如果您需要解决的唯一架构问题是解决方案中有多少层,那么您确实很幸运:—) |
![]() |
7
0
我最初考虑的是这个领域的复杂性。如果在商业、商业或工业领域,而不是计算机或数据科学领域,我默认使用基于对象域模型的体系结构。 接下来,我将考虑规模、关键性、期望和其他非功能性需求。 |