如何设计和构建Java/Java EE Web应用程序?

ash*_*ram 53 java architecture java-ee

我是Java开发人员,在Struts,Spring和Hibernate方面有近5年的经验.

我们将在几天内推出一个新项目.我们有完整的要求,我们将使用Spring MVC,Spring和Hibernate来完成这个项目.

我被要求设计和构建整个Web应用程序.设计和创建建筑师是我职业生涯迄今尚未完成的事情.我不知道如何解决这个问题,从哪里开始,使用什么工具等等.我甚至不知道A,B,C的设计和架构.

您可能想知道为什么我甚至在第一时间要求这样做.事情是我有机会这样做,在每个阶段我都会受到监控,我会让我的老人回顾设计.

因此欢迎任何建议,想法和步骤开始和继续.

kda*_*bir 123

我可以从我自己的经验中加上我的2美分(尽管它更多地是开发最佳实践的汇编,您可能会发现在设计应用程序时记住它们很有用):

  • 没有一种适合所有人的设计
  • 尽量保持应用尽可能轻.
  • 使用Maven/Gradle管理依赖项
    • 不要过分依赖IDE.确保您的项目在没有IDE的情况下构建(如果您正在使用maven/gradle,它会:)尝试使用IDEA,Netbeans和Eclipse打开您的项目.
  • 对于上面提到的技术,appfuse是一个很好的起点.
  • 首先设计您的数据库/实体
  • 明智而明智地使用库.不要过度使用它们.
  • 别忘了写JUnit/TestNG(至少对于服务层)
  • 在所有主流浏览器上测试应用程序(不仅仅是您最喜欢的浏
  • 确定您的Web应用程序将拥有多少总用户数和多少并发用户数.
    • 然后决定是否需要缓存.
    • 您将使用或不使用应用服务器群集.
  • 根据应用服务器的功能选择应用服务器,更重要的是选择"您的需求"
    • 对于大多数情况,Tomcat/Jetty绝对没问题
  • 避免使用任何特定于应用程序服务器的API
  • 即使将hibernate用作JPA实现,也要使用JPA接口/注释
  • 在映射实体中的关系时要格外小心.决定哪些属性和关系会延迟加载,哪些属性和关系会急切加载
  • 在设计应用程序时,请牢记应用程序安全性.Spring安全性是绝佳选择.
  • 永远不要滥用HttpSession.不要存储太多.
  • 保持实体可序列化.强制开发人员使用toString(),hashCode()和equals()
  • 不要忘记从第1天开始使用版本控制
  • 不要只是假设spring/hibernate/spring-mvc将是您的最佳选择.使用至少3到4个选项创建小概念证明.
  • 尝试使用Jenkins等CI工具自动化集成/构建/部署
  • 检查并调整Hibernate生成的SQL(不时)
  • 不要让业务逻辑蔓延到视图层.讨厌jsp scriptlets?考虑Velocity/Freemarker.JSP不是唯一的选择.
  • 使用Spring的PropertyPlaceholderConfigurator外部化特定于环境的配置.
  • 如果可能,尝试与现有的用户身份验证机制(如LDAP/OpenID)集成,而不是自己编写.这将使您免于重新发明轮子和用户记住另一组用户名和密码.


Spi*_*idy 13

您需要为架构设计文档提供一些内容.这不是一件容易的事,而是抓住机会的道具.由于这是一个非常大的问题,希望这些链接可以帮助您入门,并且您可以在弄湿问题后改进问题.

方法

您使用的方法将影响您首先执行的任务.瀑布是一种流行但过时的方法.一种更新的方法是敏捷,有几个面孔.我最喜欢Scrum Agile用于开发任何规模的软件.

图表是表示整个系统和单个组件的最强大的方法之一.您创建的图表类型取决于系统.通常有结构图,行为图,交互图和其他数量.这些图表显示了整个系统的各个部分,每个组件的物理布局和/或逻辑布局,通信流程,程序流程等.

文档

文档就像声音,文档和文档一样,包含项目描述,范围,用户案例,序列图以及描述项目或项目各个部分的任何其他文档.


Dor*_*use 5

看看罗伯特·马丁(又名鲍勃叔叔)的清洁架构。这是一个快速概述。使用这种方法,您将能够Spring 或 Hibernate 等细节推迟到稍后的时间,并更多地关注业务逻辑。或者甚至从 Spring 迁移到 Java EE,而无需触及您的业务和应用程序逻辑。您还将获得一个符合 SOLID 原则的可测试应用程序,而无需太多额外的工作。

我刚刚以这种方式创建了一个应用程序,我必须说我对此非常满意。我可以轻松地将其移植到桌面或移动应用程序,或者更换存储模块。取决于政策的细节有很大帮助。它还促进以 API 方式进行思考,并且如果正确应用,可以使您的模块非常可重用。

Martin 甚至表示像框架这样的细节很烦人,而且不是架构的一部分。我确实认为它们属于建筑,但只是处于不同的层次。很多时候,您确实希望在早期阶段包含框架,以便能够生成一小部分工作应用程序来向用户演示。或者当你提前知道你的框架并且没有关于它们的讨论时,就像我的例子一样。但是您可以将其视为单独的软件架构,当组合在一起时创建您的应用程序架构。