﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-大音希声、大象无形-文章分类-综述</title><link>http://www.blogjava.net/guitarpoet/category/8688.html</link><description>Java企业级应用软件开发探讨</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:34:19 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:34:19 GMT</pubDate><ttl>60</ttl><item><title>企业级应用为什么要分层</title><link>http://www.blogjava.net/guitarpoet/articles/36333.html</link><dc:creator>guitarpoet</dc:creator><author>guitarpoet</author><pubDate>Mon, 20 Mar 2006 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/guitarpoet/articles/36333.html</guid><wfw:comment>http://www.blogjava.net/guitarpoet/comments/36333.html</wfw:comment><comments>http://www.blogjava.net/guitarpoet/articles/36333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/guitarpoet/comments/commentRss/36333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/guitarpoet/services/trackbacks/36333.html</trackback:ping><description><![CDATA[首先，需要知道什么是企业级应用。<br /><br /><span style="font-weight: bold;">企业级应用（enterprise applications）</span>，其实是一个软件行业内部通用的一个术语。如果解释成通俗易懂的话来说，那就是一个企业范围内所使用的、基于计算机的稳定的、安全的和高效的分布式信息管理系统。<br />
对于企业级应用而言它的分布式有两种形式：B/S结构和C/S结构。由于浏览器的功能日益强大、网页技术的日益流行和应用服务器软件和中间件产品的逐步成
熟，B/S结构的企业级应用已经成为一种流行的趋势，所以在下面的讨论中所谓的企业级应用统一为基于B/S结构的分布式企业信息系统。<br /><br />
一般说来企业级应用都可以分为三层<a title="持久层（Persistence Layer）" href="http://www.ambysoft.com/essays/persistenceLayer.html">持久层（Persistence Layer）</a>    、<a title="业务逻辑层（Business Logic Layer）" href="http://www.onjava.com/pub/a/onjava/excerpt/bldgjavaent_8/index1.html">业务逻辑层（Business Logic Layer）</a>  和<a title="展现层（Presentation Layer  ）" href="http://en.wikipedia.org/wiki/Presentation_layer">展现层（Presentation Layer  ）</a> 。<br />
为什么要分这么几个层次呢？ <br />
归根结底主要原因只有一个——那就是提高软件开发生产力，降低软件开发成本，提高软件产品质量。<br />
因为软件公司也是资本公司，公司的主要目标是盈利而不是科技发展。所以，公司的技术架构的优劣主要应该体现在公司的生产成本和产品的质量上。<br />
对于降低软件产品的开发成本是软件产品出现以来所有软件公司所追求的目标。到目前为止，达到这个目标的方式有这么几种：<br /><ol><li>把软件产品根据功能进行分解，分别开发：对于大的复杂系统，如果没有很好的分解开发的话，其结果是不可想象的。现实中企业需要分开各个职能部门，它们的职责和业务是不同的，这样开发中需要根据业务进行任务分解，把大的系统分解成为小的业务系统。这样才能够实现系统开发过程中的并行开发，并且会培养业务专精人员，提高开发的效率。</li><li>
业务系统根据技术架构进行分层开发：分层的开发方式实现了人类对复杂事物的普遍处理方式——分而治之。通过把复杂的系统分解成为相对简单的独立系统，低耦
合的分解既可以实现开发人员的并行工作，又可以实现开发人员的任务分工。而且通过分层，对组件拼装和流水化作业提供了理论和事实的基础。 </li><li>
    组件拼装实现社会化分工：不必自己去创造轮子，直接付钱去买想要的轮子即可。这是从传统的制造行业借鉴来的经验。J2EE得到的广泛认同从实质上体现了业界对这种方式的肯定。
  </li><li>
过去经验的积累和积累资源的重复利用：重用一直是一个争议比较大的东西，争论的双方各执一词，各有道理也各有大师助阵，但是那更多的是在理论上和技术层面
上。理论和技术上的争论对商业软件开发是无用的。因为商业化的软件开发，最重要的是提供优质的产品和服务并且能够最大可能的获取利润。所以，抛开具体实现
方式不谈，我个人觉得公司过去经验的积累和积累资源的重复利用是有商业价值的。因为软件公司必须得面对开发人员流动的问题，不管是升迁还是调动还是跳槽，
软件公司总会面对业务专精人员的流失问题。业务专精人员的流失造成的成本是要计算在开发成本中的，所以怎样以固化的形式积累业务人员的经验，和过去解决问
题的方案的可重复利用以及新员工职业培训成本的降低在降低开发成本的方面是值得考虑的。</li></ol>综上所述，对于一个企业级应用框架（还有人开发企业级应用不用框架吗？）而言，分层是提高开发效率、降低开发和培训成本的最佳实践方案之一。<br />
但是，为什么要分为<a title="持久层（Persistence Layer）" href="http://www.ambysoft.com/essays/persistenceLayer.html">持久层（Persistence Layer）</a>    、<a title="业务逻辑层（Business Logic Layer）" href="http://www.onjava.com/pub/a/onjava/excerpt/bldgjavaent_8/index1.html">业务逻辑层（Business Logic Layer）</a>  和<a title="展现层（Presentation Layer  ）" href="http://en.wikipedia.org/wiki/Presentation_layer">展现层（Presentation Layer  ）</a> 3层呢？<br />
其实这三层不过就是从三个不同的视角去看这个企业信息系统罢了。从数据的角度看，企业信息系统不外乎就是对数据的存取。从功能的角度看，企业信息系统就是
对现实中的业务逻辑操作的信息化抽象而从用户的角度上看，它是一个人机接口，它可以接受输入并且会对所做的输入做出相应的反应。这三层从底向上实现了底层
计算机数据和顶层人的业务操作的跨越，一般说来，从概念上讲，所有的企业级应用框架都可以分成这三层，因为这三个视角是客观的。但是这并不保证所有的企业
级应用都能保证这三个层之间不发生耦合。<img src ="http://www.blogjava.net/guitarpoet/aggbug/36333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/guitarpoet/" target="_blank">guitarpoet</a> 2006-03-20 15:31 <a href="http://www.blogjava.net/guitarpoet/articles/36333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>