【问题标题】:How to design Java application? [closed]如何设计Java应用程序? [关闭]
【发布时间】:2011-03-13 22:04:15
【问题描述】:

在设计 Java 应用程序 [从简单的控制台应用程序到 J2EE 应用程序] 时需要牢记的一般准则和最佳实践是什么?

我最近完成了 Sun 的 Java 编程教程 并练习过核心java(我有以前的编程经验)。 现在我了解了继承、抽象、多态、封装的基础知识

现在我正在轻松编写 Java 代码,但不确定应用程序设计。 这是我的主要问题:“设计”应用程序。 假设我已经下达了用 Java 创建应用程序的任务, 我应该从什么开始?怎么想? 在开发类层次结构时,我应该遵循任何正式/非正式的指导方针吗?我真的很困惑(抽象类或接口或子类..?)。 在编写代码之前,我应该先对所有内容进行建模吗?

对于像我这样的人来说,拥有一套通用指南/最佳实践会非常有用,我们可以在开始开发新的 Java 应用程序时遵循这些指南。

请提供一些我应该阅读或使用的指南/想法/书籍/资源/工具

提前致谢 斯科特

【问题讨论】:

  • 有很多方法可以做到这一点。 JavaEE 应用程序的设计不同于控制台应用程序的设计方式将不同于 Swing 应用程序的设计方式将不同于移动应用程序的设计方式将不同于...。告诉我们您正在考虑哪种应用程序,它会更容易提供帮助你。
  • 谢谢,我想从简单的控制台应用开始,然后转到 J2EE 应用

标签: java application-design


【解决方案1】:

很难给出真正笼统的建议,因为在不同的领域有很多不同的 Java 应用程序。但是,绝对推荐的一本书是 Eric Evans 的Domain Driven Design。另请参阅 Wikipedia 以获取有关它的简短介绍。

一般建议:

  • 不要尝试预先设计所有内容 - 做一个相当好的设计,让您开始编码,然后随着您对问题领域的理解和实施的加深进行重构
  • 尝试将困难的问题分成更小的部分/步骤/模块,您可以一一解决
  • 尝试根据具有明确职责的对象进行思考,这些对象(或多或少)为问题域建模并合作解决问题/处理任务
  • 要擅长设计,首先需要实践; 不要害怕犯错误。但是,当您这样做时,请分析它们并尽可能多地从中学习
  • 学习设计模式,但不要过于热心 - 仅在它们真正解决问题并让代码更简洁时才使用它们

【讨论】:

    【解决方案2】:

    首先查看UML 类图,这将使球朝着正确的方向发展,然后看看四人组设计模式。这是一个很好的第一步。

    http://en.wikipedia.org/wiki/Class_diagram

    http://en.wikipedia.org/wiki/Design_Patterns

    最后,我会介绍一些好的开源代码,比如 Spring 框架

    http://www.springsource.org/

    【讨论】:

    • 是的,您应该明确地为所有内容建模,但如果模型不起作用,请愿意返回并更改模型。关键是灵活性...
    【解决方案3】:

    欢迎来到堆栈溢出。 如果您精通 Java,请阅读 Head First Design Patterns.Head First Object-Oriented analysis and design - 呃,可能是相反的顺序:)

    【讨论】:

    • 如果我是初学者,我不会将自己投入到设计模式中。
    【解决方案4】:

    我建议使用 TDD 进行紧急设计。

    我认为 Java 设计没有什么特别之处:如果您已经了解对象设计,那么您就可以开始了!

    【讨论】:

    • 我不同意。您为 Java 应用程序设计的类几乎肯定不同于您在 C++ 或 C# 中为同一应用程序设计的类——更不用说 SmallTalk 或 OCaml 之类的语言了。
    【解决方案5】:

    有多种范式(通常是 3 个字母的首字母缩写词):

    • DDD:领域驱动设计
    • SDD:服务驱动设计
    • MDA:模型驱动架构(代码和架构从 UML 模型中提取)
    • TDD:测试驱动开发(在应用之前实施验证测试)

    有了这些关键词,你会在网上找到很多信息。

    在 J2EE 中,我会说 SDD 是最常用的(它现在非常“标准化”,即使我不确定它是否是最佳解决方案):服务(软件“智能”)> 域(bean用于持久性的对象)> DAO(持久性)。

    现在 DDD 被越来越多地使用:概念重新聚焦于领域对象,这些对象正在占据“软件智能”层。

    【讨论】:

    • TDD 本身并不是一种设计方法(尽管它可以用于测试 API 的可用性,因此它非常有用)。 MDA 在 90 年代被大肆宣传,然后逐渐消失,这是有充分理由的:UML 是一个非常好的工具,可以传达您的设计,但不适合从中生成源代码。
    【解决方案6】:

    不要在没有任何设计的情况下立即开始编码。但这并不意味着您应该在编码之前设计所有内容。因为根据我以前的经验,我不可能有任何不需要更正的设计。特别是如果您是编程语言的新手,您的设计将根据您使用的语言的特性和可用的库而改变。我的建议是基于面向对象设计的最重要方面(例如继承、多态性、封装等)进行通用设计。从这个通用设计和您在编程时遇到的需求开始,相应地修改您的设计。

    只要您在语言方面积累了丰富的经验,您的第一个通用设计就会以一种更有效的方式适合您的程序。

    虽然大多数人都说一个面向对象的设计应该可以用任何面向对象的语言编写,但要拥有这样一个非常好的通用设计并不是那么容易。更现实地说,就我而言,忽略用于实现特定设计的语言并不是一个好方法。

    【讨论】:

    • 谢谢穆斯塔法。现在正在做的是编写具有核心功能的初始设计的小型应用程序,然后重构代码(rediesgning)以遵循 oop。
    【解决方案7】:

    您将要做的事情很有可能以前已经做过了——至少是类似的事情。幸运的是,现在有很多开源的东西。所以如果你真的不知道,你可以做的一件事是下载几个做同样事情的开源应用程序并研究它们。它应该会给你一个好的开始。

    【讨论】:

      【解决方案8】:

      在我看来,这一切都归结为满足以下要求

      1. 简单易懂
      2. 易于维护和发展
      3. 多个开发人员能够 为项目做出贡献(主要是在 并行)

      为了实现上述目标,专家根据经验提出了一些指导方针和原则

      1. 关注layered architecture
      2. 在层内和跨层遵循SOLID principles。所有的设计模式都是一种或另一种帮助实现这些原则的方式。 SRP:单一职责原则,OCP:开放封闭原则,LSP:里氏替换原则,ISP:接口隔离原则,DIP:依赖倒置原则
      3. DRY 和 KISS 原则

      这些指南和原则独立于任何编程范式或语言。但是,OOP 语言有助于更轻松地实现这些。

      【讨论】:

        【解决方案9】:

        我真的建议你看看GRASP principles,它给你一个很好的设计基础技能。

        【讨论】:

          猜你喜欢
          • 2017-07-29
          • 1970-01-01
          • 1970-01-01
          • 2012-06-30
          • 2011-07-03
          • 2010-10-28
          • 2011-09-30
          • 2017-08-11
          • 2010-09-07
          相关资源
          最近更新 更多