如何设计Java应用程序?

如何设计Java应用程序?,java,application-design,Java,Application Design,在设计Java应用程序[从简单控制台应用程序到J2EE应用程序]时,需要牢记哪些一般准则和最佳实践 嗨 我最近完成了Sun的Java编程教程 并练习核心java(我以前有编程经验)。 现在我了解了继承、抽象、多态性和封装的基础知识 现在我编写Java代码没有太大困难,但不确定应用程序设计。 这是我的主要问题:“设计”应用程序。 假设我给了一个任务,用Java创建一个应用程序, 我应该从什么开始?如何思考? 在开发类层次结构时,我应该遵循哪些正式/非正式的指导原则?我真的很困惑(抽象类、接口或子类

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

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

现在我编写Java代码没有太大困难,但不确定应用程序设计。 这是我的主要问题:“设计”应用程序。 假设我给了一个任务,用Java创建一个应用程序, 我应该从什么开始?如何思考? 在开发类层次结构时,我应该遵循哪些正式/非正式的指导原则?我真的很困惑(抽象类、接口或子类…?)。 在编写代码之前,我应该先对所有内容进行建模吗

对于像我这样的人来说,有一套通用的指导方针/最佳实践是非常有用的,我们可以在开始开发新的java应用程序时遵循这些指导方针/最佳实践

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

提前谢谢
Scott

很难给出真正一般的建议,因为在不同的域上有这么多不同的Java应用程序。然而,埃里克·埃文斯绝对推荐了一本书。另请参阅,以获取关于它的简短介绍

一般忠告:

  • 不要试图预先设计所有东西-做一个合理的好设计,使您能够开始编码,然后随着您对问题领域和实现的理解加深而重构
  • 试着把难题分成更小的部分/步骤/模块,你可以一个接一个地解决
  • 试着用职责明确的对象来思考,这些对象(或多或少)对问题域进行建模,并合作解决问题/处理任务
  • 擅长设计首先需要实践不要害怕犯错误。然而,当你这样做的时候,要尽可能多地分析它们并从中学习
  • 学习设计模式,但不要过于热心-只有当它们真正解决了问题并使代码更干净时才使用它们

从查找UML类图开始,这些类图将使事情朝着正确的方向发展,然后查看“四人帮”设计模式。这是极好的第一步

最后,我将介绍优秀的开源代码,如Spring框架

欢迎来到堆栈溢出。 如果您擅长Java,请阅读 和
-呃,可能是相反的顺序:)

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


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

有各种范例(通常是3个字母的缩写):

  • 领域驱动设计
  • SDD:服务驱动设计
  • MDA:模型驱动架构(代码和架构从UML模型中提取)
  • TDD:测试驱动开发(验证测试在应用程序之前实施)
有了这些关键词,你会在网上找到很多信息

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


现在,DDD的使用越来越多:概念重新聚焦于领域对象,它们占据了“软件智能”层。

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

只要您对该语言有丰富的经验,您的第一个通用设计将以更有效的方式适合您的程序


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

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

在我看来,这一切归结为满足以下条件

  • 易懂
  • 易于维护和发展
  • 多个开发人员能够 为项目做出贡献(主要是在 (平行)
  • 为了实现上述目标,专家根据经验提出了一些指导方针和原则,这些指导方针和原则是

  • 跟随
  • 遵循层内和层间的规则。所有的设计模式都是以某种方式帮助实现这些原则。SRP:单一责任原则,OCP:开闭原则,LSP:Liskov替换原则,ISP:接口分离原则,DIP:依赖倒置原则
  • 干吻原则

  • 这些准则和原则独立于任何编程范式或语言。不过,OOP语言有助于更轻松地实现这些功能。

    我真的建议您看看,它为您提供了一个良好的设计方案