在网上也看了很多东西,关于JAVA软件架构方面的东西,现在还真是很难找到,不过,软件开发的架构基本是相同的。所以,我在网上查找了很多其他语言关于软件架构方面的文章。再这里也来说说自己对软件架构,特别是在JAVA项目架构方面的看法。说得不一定对,但这也是我几年来的总结吧。
1. 尽量不要考虑项目外的重用
许多人认为能提高软件的重用度是最好的,然而每个项目实际情况都会有所不同,在设计项目中的某个模块、方法时,过多的考虑项目外的重用,必然会增加项目的复杂度,增加对开发时间的开销。也许有人会说,这会减少下一项目的开销,试问,下一项目是什么项目?有什么需求?各方面有什么影响因素?有谁会在当前知道这一切。 如果真要重用,应该是在项目结束后再将可重用的部分提取出来,经过修改、优化后做为企业的可重用资产,而不是当前项目中的一厢情愿。考虑项目外的重用性,这是很多刚从事软件工作的程序员常犯的错误,往往是考虑得越多,反而做出来的软件达不到设计的效果,完不成基本的功能或者代码逻辑过多,程序功能不完善等等。
2.经常检查项目架构
项目架构通常是在项目实现开始前就已确定的东西,是一个总体的设计。然而,在这时,对项目需求的理解、复杂度的估计都还停留在一个初始阶段。如果在项目开发过程中不能随着对项目的理解而改进架构,必然让项目中的成员都按错误的架构去开发项目。所以,必须经常检查项目的架构,进行必要的重构。
3.重构
有人说,都写了这么多了,再修改不是浪费时间嘛。他可能没有想过,一个下午的重构可以加快以后几个月的开发速度,这节省下来的时间是无法想象的。再者,通过重构,通常能想到更多简单的方法来代替现有的实现,这样的经验,同样可以简化其他模块的开发。
4.避免过度集成,让每个模块只做自己的事
一个常见的OA开发例子是,在业务系统中通常会有许多的审批,很多人一下子肯定会想到把审批做成一个通用的模块。这是没有问题的,然而通常的问题是,太多的人将审批结束后的业务处理也放到了审批模块的业务逻辑中,其实,那些是各业务模块自己的事,审批应该只完成审批即可,至于审批结束后怎么办,让该干这事的模块自己去处理。
5.避免过度灵活
设计和代码并不是越灵活越好的。一个常见的例子是,使用泛型时可以使类或者方法操作不同的对象,然而,在 JAVA 常用的 三 层架构中,如果一系列的类本来就是针对某个特定实体的操作,就没有必要还指定为泛型,再在使用时指定为使用特定的实体类。这颇有画蛇添足的感觉。
6.减少锦上添花的功能
页面无刷新,更酷的显示效果等等,对于业务系统来说都是些锦上添花的事,如果因为这些而使业务界面非常复杂,给业务处理带来一系列的问题,极端情况是业务处理无法继续时,再漂亮的界面也是无用的。一个忠告时,仅在确保业务处理正确进行的前提下再考虑其他的。这一点有一个前提是与用户进行必要的沟通。也就是说,JAVA实现的项目,重点在于对业务的处理上,只有很好的实现了业务处理,才能去考虑界面的美观与用户的视觉感官 。
7.适当拆分
这一点与 4 类似。尽量降低每个模块的复杂度,让脑力劳动转化成体力劳动。一个常见的例子是,通常对某个表单都会有增加、修改、删除和查看的功能。但是,前三种操作通常仅在某个功能点上、特定状态和特定权限的人进行操作(也许仅在在系统中的唯一一个界面中)。而查看操作却会分布在项目的各个角落,如果将这四种操作都放在同一界面中,虽然可以减少界面数,但增加的却是这一界面的复杂度,要对各种状态、条件进行必须的判断来进行界面元素的只读设置,这个复杂度的增加是指数级的,而如果将查看拆分开,工作量将是线性的,就算要做10个查看界面,总比复杂度变成 10*10 要容易处理得多,况且还可以组件化。
8.与客户保持良好的沟通
很多人都没有注意去保持和客户的沟通,很多架构师都认为,只在项目的需求阶段才需要和客户有沟通和交流,这点是很不好的习惯,因为客户的要求会随着时间的变化而变化,只有经常和客户保持良好的沟通,才能在第一时间内了解客户的需求变化,从而调整自己的项目架构方案,在最短的时间满足客户的需求。
9.项目架构与数据库架构的联系
很多人都认为,项目在开发的过程中,是不需要数据库的,只要在内存中实现就可以了。我个人认为,这是一种很不好的开发习惯。数据库虽说是根据项目的具体需求而定。但一个项目在架构过程中完全不考虑数据库的架构,那很可能就会使项目中实现的东西,在数据库中很难记录或者是数据库设计很麻烦,无形中增加了项目开发的难度。并且,在项目的开发过程中不考虑数据库,可能会使项目在挂靠数据库后,出现部分业务逻辑的无法实现,数据的丢失等等问题。
当然,很多人的架构风格的不同,会有不同的架构见解,我的见解也不一定是正确的。希望大家可以从我的东西都学到一些东西,也希望大家可以多多交流在架构方面的看法
分享到:
相关推荐
综上所述,一个完整的Java架构设计示例文档会涵盖上述多个方面的内容,它不仅为开发者提供架构设计的蓝图,同时也为项目管理和后期维护提供了宝贵的参考。对于希望了解如何从零开始设计一个Java应用架构的人来说,...
2. 技术选型:Java架构师需要对当前的技术趋势有深入的了解,能够根据项目的实际情况选择合适的技术栈和工具链。这包括Java版本选择、Web框架选择、ORM框架选择、前端技术选型等。 3. 性能优化:Java架构师需要对...
"Java开源项目汇总" Java是一种广泛应用的编程语言,它有着庞大的开源社区和丰富的知识体系。本文档汇总了各种Java开源项目,涵盖了Java教程、Java实战、系统设计、devops、工具等方面的知识点。 Java教程 * ...
本书详细介绍了Java Web软件架构中的各种开发技术。主要内容包括:以MySQL为数据库、Tomcat为Web服务器、Eclipse为... 本书面向读者对象:Java和J2EE软件架构师与设计师、软件开发工程师、软件开发项目及技术经理。
Java项目架构 这些Java项目源码的架构主要包括: * 主要模块:sprider(爬虫)、downloader(下载器)、 seleniumTools(Selenium工具)、spriderAccess(爬虫访问)等。 * 依赖项:requests、BeautifulSoup、docx...
Java架构师之路是一个漫长而富有挑战性的过程,它要求程序员不断地学习和提升自己的技能。以下是一些基于给定书籍推荐的知识点,可以帮助Java程序员逐步成长为一名专业的架构师: 1. **Java编程入门**: - **...
【Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式】 这门课程是针对Java开发者设计的,旨在提升他们的企业级项目架构能力,特别是聚焦于Tomcat集群和Redis分布式缓存的应用。课程内容丰富,适合希望晋升...
在“Java项目学习资料”这个压缩包中,我们可以期待找到一...总之,“Java项目学习资料”提供的内容广泛且深入,涵盖了从基础知识到高级架构的多个层面,对于想要全面掌握Java开发的人来说是一份不可多得的学习资源。
Java分布式架构 Java分布式架构是指在Java EE平台上设计和实现的一种软件架构,它将系统拆分成多个独立的模块,每个模块都是一个独立的子系统,通过服务调用和数据交换来实现通信。这种架构方式可以提高系统的可...
Java 架构师是软件开发项目中的技术骨干,负责软件产品和项目技术路线研究和制定。Java 架构师的主要职责范围包括: 1. 负责系统架构设计、研发工作:Java 架构师需要对系统架构进行设计和实施,确保系统的稳定性、...
简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构网络编程;简易模拟tomcat服务器项目源码java学习CS架构...
《Java高手真经_系统架构卷:Java.Web系统设计与架构》是一本深入探讨Java Web系统构建和架构设计的专业书籍。这本书主要针对那些希望通过提升Java技术能力,掌握Web系统架构设计精髓的开发者。标签“java”表明了...
Java EE 架构师认证指南 本资源提供了 Sun 官方的 Java EE 架构师认证考试所需要准备的知识.pointer。该考试由三部分组成:多选题测试、任务指派和对指派的...Java EE 架构师需要能够对实际项目进行分析、设计和实施。
高级 Java 工程师架构师个人简历模板 作为一名高级 Java 工程师架构师,个人...高级 Java 工程师架构师的简历模板展示了其在 Java 语言、Java 技术栈、数据库管理、项目管理、团队管理、语言能力等方面的知识和经验。
《Java应用架构设计:模块化模式与OSGi》这本书可能会详细讲解如何在Java项目中实施模块化设计,以及如何利用OSGi来构建模块化系统。通过学习,开发者可以掌握如何创建可扩展、可维护的Java应用程序,理解模块化设计...
④ 架构:B/S、MVC ⑤ 开发环境:IDEA、JDK、Maven、Mysql ⑥ JDK版本:JDK1.8 ⑦ Maven包:Maven3.6 ⑧ 数据库:mysql 5.7 ⑨ 服务平台:Tomcat 8.0/9.0 ⑩ 数据库工具:SQLyog/Navicat ⑪ 开发软件:eclipse/...
Java互联网架构师是一个涵盖广泛领域的专业角色,这个角色需要深入理解软件开发的各个方面,特别是针对大规模、高并发的互联网应用。本课程集成了多种关键知识点,旨在帮助在职Java工程师提升技能,迈向架构师之路。...