几年前,我们店里的每个人都对UML很疯狂.现在每个人似乎已经冷静下来了.
如果在软件项目中仍然广泛使用UML,我很好奇.
如果是这样,这种用法仅限于白板吗?你用它来做文件吗?您是否使用工具从中生成代码?
我目前正在上学,对于我的高级项目,我们不得不花费1/3的时间来为我们的项目做UML图和其他繁琐的文档.
这包括很多设计和规划尚未发生的未来问题.
出于某种原因,这似乎是鼓励过度设计.我花了最后一小时写这样的东西.
"连接到服务器 - 连接到服务器.前提条件:不存在服务器连接.后置条件 - 连接现在存在".
我宁愿做编码而不是做这个废话.我意识到这个设计工作有它的位置,但多少钱?我知道这不是防止在诸如Enterprise Arch之类的工具中进行设计的绝对证据,但是我在这里.
我教授这些课程的教授设计了他的项目.应用程序中可能发生的每件事都已记录在案.他没有自己编码,而是利用这个"完美无瑕的文件"将海外工作和暑假期间的学生分开.
所有这些设计产生的应用程序都是可怕的.这是我见过的最糟糕的应用程序之一,任何人都可以告诉你它已被过度设计.
SO有经验的编码社区对此主题有什么看法?在项目之前设计很多是因为"设计文档这么说"而通过强制做出决策而制作糟糕的程序吗?
非常感谢您提供的任何见解.如果我知道这一切都是有充分理由的话,我会感觉更好"浪费"我的时间.我非常愿意事先做一些设计工作,但我觉得我的教授期望在编写任何代码之前做出很多工程决策.
编辑:关于这个主题的有趣的slashdot文章. http://books.slashdot.org/story/09/11/16/1448204/Becoming-Agile
UML2提供不同类型的图表.到目前为止,我只使用了类图.
你使用什么样的UML图?您为软件项目的设计和文档推荐了哪些图表?
可能重复:
UML是否实用?
我在大学做UML,我不明白为什么要这样做.它看起来像是OO数据库的模型,但我想我可以在没有UML的情况下编写Java.
我想知道为什么在专业领域使用UML的技术原因; 为什么这很重要.不只是学习它,因为教授这么说.
我正在编写一些复杂的UI代码.我决定使用带有鱼,风筝和海平面的Cockburn用例(Martin Fowler在他的书"UML Distilled"中讨论过).我将Cockburn用例包装在静态C#对象中,以便我可以针对静态常量测试逻辑条件,静态常量表示UI工作流程中的步骤.我的想法是你可以阅读代码并知道它在做什么,因为包装的对象及其公共内容通过命名空间为你提供了ENGLISH用例.
此外,我将使用反射来抽出包含所描述的用例的错误消息.这个想法是堆栈跟踪可以包括一些用例步骤IN ENGLISH ....事实证明这是一种有趣的方式来实现迷你,伪造轻量级域语言,但无需编写DSL编译器.所以我的问题是这是否是一个很好的方法呢?有没有人在那里做过类似的事情?
c#示例片段如下
假设我们有一些aspx页面,它有3个用户控件(有很多可点击的东西).用户必须点击一个特定用户控件中的内容(可能进行某种选择),然后UI必须在视觉上提示用户选择成功.现在,在选择该项目时,用户必须浏览网格视图以在其中一个用户控件中查找项目,然后选择一些内容.这听起来很容易管理,但代码可能变得丑陋.
在我的例子中,用户控制主页捕获的所有已发送事件消息.这样,页面就像UI事件的中央处理器一样,可以跟踪用户点击时发生的情况.
因此,在主aspx页面中,我们捕获第一个用户控件的事件.
using MyCompany.MyApp.Web.UseCases;
protected void MyFirstUserControl_SomeUIWorkflowRequestCommingIn(object sender, EventArgs e)
{
// some code here to respond and make "state" changes or whatever
//
// blah blah blah
// finally we have this (how did we know to call fish level method?? because we knew when we wrote the code to send the event in the user control)
UpdateUserInterfaceOnFishLevelUseCaseGoalSuccess(FishLevel.SomeNamedUIWorkflow.SelectedItemForPurchase)
}
protected void UpdateUserInterfaceOnFishLevelGoalSuccess(FishLevel.SomeNamedUIWorkflow goal)
{
switch (goal)
{
case FishLevel.SomeNamedUIWorkflow.NewMasterItemSelected:
//call …Run Code Online (Sandbox Code Playgroud)