您如何区分设计决策与实施决策?
举一个具体的例子: 我们正在开发一些将我们的应用程序与另一个集成的Web服务 我问过的一个问题是 - 我们是否希望两个应用程序之间的集成 asynch或同步?
有人建议它是一个实施问题,而不是设计。
我的请求是 - 如果我改变了一些东西而你不需要知道我改变了什么或为什么改变它 - 它的实施决定。
但是,如果我改变某些东西 - 这会改变你使用我的服务的方式 - 这是一个设计决定。
如果我将实现更改为同步 - 猜测的异步,则会影响服务的使用方式 - 因此 - 它是设计决策而非实现
例如,无论我选择XML用于存储还是数据库 - 只要它不影响其他应用程序 - 它仍然是一个实现选择而不是设计
你同意吗?不同意?想法?答案 0 :(得分:5)
我认为你已经知道了答案,说实话,对于大多数实际用途来说,这是一个不必要的语义区别。话虽如此,它的设计是否会影响最终用户/消费者,如果没有,则是实施。在您的示例中,它将对任何使用您的服务的客户端的设计产生深远的影响,因此它肯定是设计的。
没有序列。在实施开始之前,您无法实际完成设计,并且盲目地遵循具有高且不必要的实施成本的设计是非常危险的。考虑到您对成本的了解,您可以选择在实施过程中重新设计。
答案 1 :(得分:2)
设计阶段在实施阶段之前(在项目的前端)。当然,一旦你开始实施 ,你可以改变设计如果有充分的理由:这就是的原因迭代过程“
product requirements -> design -> implementation -> back to product etc.
以便汇聚到产品。
设计阶段的存在是为了优化(读取:$)实施阶段,并确保满足业务目标。
架构是另一个通常与 design 相关联的术语:在设计阶段,架构被选中。
答案 2 :(得分:2)
我最喜欢的建筑定义:
架构是一系列难以改变的决策
我认为这也适用于设计/实施方面的差异。如果决定足够困难,那么这是一个设计决定。
“硬”的定义有些主观,取决于您的项目。我会说你的问题中的同步/异步决定以后很难改变 - 所以我称之为设计决定。
答案 3 :(得分:2)
对我来说,设计决策是在这种情况下是否支持异步和同步或仅支持同步通信。实施决策将是如何实现对异步或同步通信的支持。
答案 4 :(得分:0)
我认为设计决定就是你想要的。这是你最终的,没有污染的目标。
实施决策是因为某些技术问题而必须调整所需的设计。
答案 5 :(得分:0)
从异步接口检索结果和错误将会复杂得多,但在感知性能和灵活性方面尤其明显。 由于您必须权衡每种方法的总体优缺点以及它们如何满足您的应用程序的要求,因此我认为这是一项设计决策。