在实现任何代码之前评估设计的任何好方法?

时间:2009-08-05 17:00:12

标签: architecture

是否有任何启发式方法用于确定设计中是否存在缺陷?或者它是否具有经验带来的主观技能?我经常看到工程师选择第一个设计,然后根据结果进行调整,这可以完成工作,但这很费时间。我想知道SO的想法是什么。

6 个答案:

答案 0 :(得分:2)

就我个人而言,我经常使用Alloy来增加对我的设计的信心 - 这里有一个article on it(和其他同类工具)很好地描述了它。并非所有人都相信这些东西并且它肯定不适合所有人,但每次触摸它时它都帮助了我,即使我不知道如何分析我的东西也有帮助。

我认为部分设计确实是一些主观技巧。我总是试图将设计中的概念降到最低。我更喜欢编写一个简单的,最小的核心,并将一个(或两个)层放在顶层,将概念映射到底层。有时候不止一个最小集合。在人们提出您在原始设计中没有想到的新要求之前,是否做出正确的选择通常并不明确。然后我想回想一下,如果我选择了另一个最小集,那么添加它会更容易还是更难。最近的项目表明我对此慢慢感觉良好:)。

是的,我猜经验很重要。在你犯了很多错误之前,我认为你不能让真正擅长设计。

我非常喜欢设计介绍的建议。我过去常常想过这个。如果你想把它呈现给别人,我认为你真的需要对设计有一个很好的理解(至少,以某种方式让每个人都明白你将要做的事情)。

答案 1 :(得分:0)

我们通常会做一个评论,制作设计的人必须将它呈现给其他建筑师,他们会尝试在设计中挖洞。

一种有趣的方式,它也教会团队系统应该如何工作,是:

  • 将系统划分为图层/模块
  • 团队中的每个人都被分配了一个模块(带名字的帽子)
  • 然后尝试做事情(用例),说登录一条消息(纸张),用户名和密码被提供给john(UI),将其提供给James(业务层)...... / LI>

你无法做到这一切,这需要太长时间。但如果某些内容过于复杂,它应该出现在这里,或者如果有人收到一条消息,说“我不知道该怎么做”,这表明缺少某些东西。

在技术方面,如果它是我们以前没有使用过的技术,我们将建立一个薄系统垂直概念的证明。这也是编码器如何编程系统的一个例子。

答案 2 :(得分:0)

用例是你的朋友。它们可以帮助您确定所有数据需要存在的位置,以及需要在模块之间传递的消息。如果您看到传递了太多数据,则可能需要重新绘制模块的边界。

原型设计也很有帮助。它是编码,但它通常是一次性的。这是另一个抓住你错过的陷阱的好方法。这些往往是您在模型中忽略的更多技术问题......线程问题,IO问题,数据结构选择。

答案 3 :(得分:0)

我会说不,没有真正的方法,这是经验所带来的。

早期同行评审的问题是你最终会优化错误的问题。

根据您的理解优化问题,然后业务出现并改变您的要求。你最终会浪费那些昂贵的评论资源。

答案 4 :(得分:0)

This guy做得非常出色,解释了为什么你不会在第一次“尝试做对”时永远消失...从1:30左右开始

答案 5 :(得分:0)

我们创建原型并收集用户的反馈。你可以用纸和纸创建原型。铅笔,或用原型工具。

市场上有许多原型制作工具,ForeUI是我们的最爱,它可以将原型导出到DHTML,以便每个人都可以查看它。