【问题标题】:Designing object oriented systems / GUIs设计面向对象的系统/GUI
【发布时间】:2011-11-03 00:56:47
【问题描述】:

我面前有一个相当大的项目,我打算使用 Java 进行开发。我不是 Java 专业人士,但我以前使用过它,并期待更多地了解它。

我已经开始着手这个项目,但随着我继续工作,我意识到我一直忽略整个项目的不同需求,或者我可以通过更好的对象设计更有效地实施的不同事物。

对于那些经常构建面向对象系统的人来说,你们都发现了哪些方法可以使最终结果更有效地工作?即:是否有一个分步程序可用于确定系统的体系结构,例如

  1. 提出需求
  2. 类似利益的集团要求
  3. 映射依赖关系
  4. 等等等等

如果您能提供任何关于构建面向对象系统的有效方法的建议,我们将不胜感激。

注意 - 这是一个基于 gui 的应用程序。因此,我计划采用 MVC 方法(模型是 MySQL 数据库,控制器是 GUI 类的代码隐藏类,视图是 GUI 类)。如果还有为 GUI 构建面向对象系统的特定技术,请在此处留下。

提前谢谢你。

【问题讨论】:

  • 集中测试驱动开发似乎是为了加快开发周期。虽然我认为这会有所帮助,但从架构的角度来看,这似乎并不能说明 OO 架构。
  • 考虑格里芬。 Swing 已经是 MVC,您是否想在其上放置其他东西,或者?没有循序渐进的过程——这是一个迭代过程,并且高度依赖于需求。
  • 是的,如果我已经在使用 Swing,我想我不需要指定我正在使用 MVC。同意这是一个迭代过程,但从足够高的角度来看,无论需求和内容如何,​​不同项目方法之间必须存在一些相似之处。
  • @DaveNewton:我同意 Spring 本身在内部是 MVC。但是,作为一个整体,Spring 只代表了你的应用程序的 VC。该模型将基于需求和可能的简单 POJO。 OP 必须将应用程序的模型转换为 Swing 的模型。它们不一样(除了一些非常微不足道的东西)。 Swing 本身就是 MVC,但只是他架构的一部分,但并不构成整个应用程序的 MVC。

标签: java oop architecture


【解决方案1】:

这是一个非常快速的写下我在我自己的个人项目中所做的事情(有点)。 (这可能不是您所追求的,但它可能会有所帮助。某些部分可能不相关):

  1. 想想我想要通过软件项目实现什么,以及我的动机。只是为了学习一门语言、技术或概念吗?是否尽可能地构建一个非常完善的程序?是为了打动别人吗?是因为我必须这样做还是达到目的的手段?是为了培养我的技能吗?纯粹是为了好玩吗?
  2. 确保我清楚地了解它应该具备的主要功能(“对于这个版本”是我一直给自己的一个很好的台词)
  3. 写出尽可能多的要求,直到它们变得不那么容易(我在家里运行的 wiki 上这样做)。它不必是一大堆。我希望自己掌握了大约 80% 真正重要的内容。
  4. 如果我在这个阶段还不知道,想出一些关于我将使用什么流程和工具(方法)的想法。什么语言,什么框架等可能是相关的。如果我不知道,我会找出答案。
  5. 重复上述操作,直到我对要构建的内容、如何进行以及使用什么有了足够的了解。
  6. Visual Paradigm 中为 UML创建一个项目。
  7. 开始在问题域分析UML模型中处理开发用例
  8. 创建一些静态问题域图。只是我在这里使用 UML 的基本类图,但它与软件无关。
  9. 创建一些动态问题域图。只是基本的序列图。我在这里使用 UML,但它与软件无关。
  10. 迭代 问题域。我通常发现开发问题域模型不需要那么长时间,它就会变得相当稳定。显然,这将随着范围和复杂性的增加而改变。
  11. 创建解决方案域分析/架构模型并开发解决方案的用例
  12. 如果有任何 UI 设计 要做,我会开始考虑它并在此处与用例一起线框图
  13. 创建一些静态解决方案域分析图,我尝试将一些静态分析模型转换成看起来更像软件结构的东西,而不考虑如何实现它.我从高处开始,在低处工作,试图充实一个架构。此时,我将开始寻找可能应用模式的明显结构和位置。
  14. 创建一些动态解决方案域分析图,我在其中尝试充实静态分析模型,看看我在实际尝试遍历系统时是否遗漏了任何东西。仍然留意这里的模式。
  15. 创建一些静态解决方案域设计图,我尝试将解决方案分析模型转换为我想要实现的实际类和组件。我开始高,工作低。模式和架构必须在这里开始结晶。
  16. 创建一些动态解决方案域图,我尝试通过查看是否缺少任何类或功能来充实静态模型。我发现很多重要问题都在这个阶段得到了解答。
  17. 迭代所有步骤到上一个迭代点并优化模型,直到我得到我乐意开始实施的东西。
  18. 设置构建环境(如有必要)
  19. 在 IDE 中创建项目我将使用并设置版本控制
  20. 建立构建系统
  21. 根据解决方案设计实施
  22. 更新各种 UML 模型和图表,因为我在实现设计时遇到了无法预料的问题。
  23. 执行我需要的任何手动验证(通常只是临时系统测试以说服自己看看我是否满足了我的要求)。
  24. 迭代最后三个步骤,直到系统有效,我很乐意将我的姓名首字母写在结果上。
  25. 从第 7 步开始,想出要添加和迭代下一个功能

我想总结一下,我严重依赖多个层次的 UML 建模。布局类和跟踪与我可以快速拖动和连接的实体的交互是无可替代的。我发现问题和解决方案域以及分析和设计模型的分离通常非常有用和解放。

我希望有人对此感兴趣。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2017-02-20
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多