24

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

你好

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

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

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

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

在此先感谢斯科特

4

9 回答 9

14

很难给出真正一般性的建议,因为不同领域有很多不同的 Java 应用程序。然而,一本绝对推荐的书是Eric Evans 的领域驱动设计。有关它的简短介绍,另请参见Wikipedia

一般建议:

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

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

  1. 容易理解
  2. 易于维护和发展
  3. 多个开发人员能够为项目做出贡献(大部分是并行的)

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

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

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

于 2010-07-09T15:56:08.550 回答
3

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

于 2011-11-12T20:28:40.193 回答
3

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

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

使用这些关键字,您会在网络上找到很多信息。

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

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

于 2010-07-09T14:49:35.867 回答
2

欢迎来到堆栈溢出。如果您精通 Java,请阅读Head First Design Patterns。Head First 面向对象的分析和设计- 呃,可能是相反的顺序:)

于 2010-07-09T14:44:27.023 回答
1

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

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

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

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

http://www.springsource.org/

于 2010-07-09T14:39:59.363 回答
1

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

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

于 2010-07-09T14:46:22.593 回答
1

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

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

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

于 2010-07-09T14:50:08.850 回答
1

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

于 2010-07-09T14:52:52.307 回答