如何设计Java应用程序?

问题描述:

什么是要牢记,同时设计的Java应用程序[简单的控制台应用程序以J2EE应用程序]的一般准则和最佳做法?如何设计Java应用程序?

我最近完成的Java程序设计教程来自Sun 并实践核心Java(我以前有过编程经验)。 现在我明白了继承,抽象,多态,封装的基础知识

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

这将是对我这样的人非常有用的,具有普遍的准则/最佳做法,我们可以在开始开发一个新的Java应用程序遵循的SET。

请给我提供一些指引/思念/书籍/资源/工具,我应该读或提前 使用

感谢斯科特

+0

有很多方法可以做到这一点。 JavaEE应用程序将被设计为与控制台应用程序有所不同。将设计与Swing应用程序不同。将设计与手机应用程序有所不同。将设计与....不同的设计。告诉我们您正在考虑哪种类型的应用程序,它会更容易帮助您。 – FrustratedWithFormsDesigner 2010-07-09 14:39:12

+0

谢谢,我想用简单的控制台应用程序启动,然后转到J2EE应用程序 – Dushyanth 2010-07-09 15:28:54

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

一般建议:

  • 不要尝试了前面设计的一切 - 做一个相当不错的设计,使您能够开始编码,然后重构为您的问题域的理解和执行加深
  • 试图分裂难题成较小的部分/步骤/模块,您可以通过一个
  • 尝试解决一个想到的具有明确的责任,这(或多或少)模型的问题域和合作对象的条件解决问题/处理E中的任务
  • 成为善于设计需要实践,首先; 不要怕犯错误。但是,当你这样做,对它们进行分析并从中尽可能多的学习,你可以
  • 学习设计模式,但不要过分热心 - 使用它们,只有当他们真正解决问题,使你的代码更清洁

开始通过查找UML类图,将让球在正确的方向滚动,然后看看四人帮的设计模式。这是一个很好的第一步。

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

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

最后,我想倒在优秀的开源代码,如Spring框架

http://www.springsource.org/

+0

是的,你应该定义一切模型,但是如果它不起作用,就愿意回去改变模型。关键是灵活性... – Ayubinator 2010-07-09 14:42:15

欢迎堆栈溢出。 如果你善于使用Java,阅读Head First Design Patterns.Head First Object-Oriented analysis and design - 呃,可能是相反的顺序:)

+2

如果我是初学者,我不会把自己投入设计模式。 – 2010-07-09 14:46:10

我建议紧急设计与TDD。

我认为没有什么特别的Java设计:如果你已经知道对象设计,你已经准备好了!

+0

我不同意。您为Java应用程序设计的类几乎可以肯定与您在C++或C#中为相同应用程序设计的类不同 - 更别提SmallTalk或OCaml等语言。 – Gabe 2010-07-09 14:59:36

有各种不同的范式(往往3个字母缩写词):

  • DDD:领域驱动设计
  • SDD:Serviice驱动设计
  • MDA:模型驱动架构(代码和架构从提取UML模型)
  • TDD:测试驱动开发(验证测试在应用程序之前执行)

使用这些关键词,您可以在网上找到大量信息。在J2EE中,我会说SDD是最常用的(即使我不确定它是最好的解决方案,它现在已经非常“标准化”):服务(软件“智能”)>域(用于持久性的bean对象)> DAO(持久性)。

现在,DDD越来越多地被使用:概念重新集中在正在采用“软件智能”层的领域对象上。

+1

TDD本身不是一种设计方法(尽管它可以用来测试API的可用性,因此它非常有用)。在九十年代,MDA被大肆宣传,然后它消失了,这有一个很好的理由:UML是一个非常好的工具,可以用来传达你的设计,但不适合从源代码中生成源代码。 – 2010-07-09 16:28:59

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

尽管您在语言方面经验丰富,但您的第一个一般设计将以更高效的方式适用于您的程序。

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

+0

谢谢穆斯塔法。现在正在做的是使用初始设计来编写具有核心功能的小型应用程序,然后重构代码(rediesgning)以跟踪oop。 – Dushyanth 2010-07-09 15:23:05

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

在我看来,这一切都归结为满足下面

  1. 容易理解
  2. 易于维护和发展
  3. 能够 多个开发项目作出贡献(主要是在 平行)

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

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

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

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