ASP.NET网站开发的架构设计
ASP NET网站开发注意事项之网站文件名
网站文件名以标准英文单词描述业务内容 如果 个英文单词无法描述 可以增加 个或者 个 但尽量为完全单词 例如article aspx/ articleView aspx / articleList aspx 等
文件名尽量不用数字描述
文件名尽量不能太长 以不超过 个字母为宜
图片文件名尽量描述图片内容分类 尽量以btn menu title arrow line dotline bg等前缀命名 例如
Btn_friendlinks gif / title_contactus gif
禁止采用 inc等对include文件命名 此文件名可下载 不利安全 有动态内容的文件 都要采用
开发技术命名 例如 dbconn inc aspx / index lang aspx
虽然可能在不同文件夹 尽量不要产生同名文件 例如 modules/index aspx language/index aspx
ASP NET网站开发注意事项之对设计师的要求
图片文件的保存 网站页面设计者在切图后把图片分类 有文字的图片放到language/语言/images/文件夹下 没有文字的图片放到templates/当前网站名/images/文件夹下
CSS样式文件的保存 网站设计最少 个CSS文件 一个是language/语言/下langStyle css 文件 此css文件负责语言转换后文字大小 字体的定义 另外的css 文件保存在templates/当前网站名/styles文件夹下 此类css为页面布局显示作用
Media文件的保存 Swf文件等常用media文件可以同图片文件保存一样 但要分有文字和无文字
页面文件的保存 所有页面文件均保存在templates/当前网站名/目录下 不分子目录 文件扩展名为 HTML或者 tpl aspx / tpl php 等 链接统一采用一种绝对或者相对 不能混用
文件名按照第二点说明命名 不需要提取inc等文件 如果设计师修改了公共部分 可以注明以哪个文件为准
ASP NET网站开发注意事项之对程序员的要求
模块化编程 采用显示层/控制层/数据层分层开发 模块设计时考虑可重用性 方便应用于别的项目
基于类的编程 增加代码可重用性 可阅读性
注释清晰 方便后续开发人员修改
HTML的模版读取 控制模块分类 数据操作等要思路清晰 不能混淆
基于多语言 多模版的开发思路 方便网站升级 改版 功能扩展和移植
ASP NET网站开发注意事项之其他说明
网站后台管理功能也适用于上述架构 当然可以取消模版功能设计部分
HTML的针对搜索引擎的亲和设计 DIV+CSS布局设计 就是要看设计者的综合技能了
程序员对交互内容传输安全性的考虑 可以引用SSL技术来加密传输敏感数据 也可以采用Javascript加密+后台脚本解密 交换秘钥方式发送接收加密数据 这样的方案成本低 速度快
程序员对防止SQL注入攻击 暴力破解的代码防范 upload功能的漏洞检测等
技术隐藏实现和URLRewrite的应用 IIS下URLRewrite应用或者隐藏扩展名的开发部署
本架构输出是基于功能动作访问的不是基于页面访问的 例如
访问会员资料修改以前是直接访问/member/infoModify aspx 而本架构是通过 /cmd?act=memberModify 访问
lishixinzhi/Article/program/net/201311/12638
软件架构(software
architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系
统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向
对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。
软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。
在“软件构架简介”中,David Garlan 和 Mary Shaw
认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结
构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。
但构架不仅是结构;IEEE Working Group
on Architecture 把其定义为“系统在其环境中的最高层概念”。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注
重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。
在Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。
从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管
理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑
和流程。
一般而言,软件系统的架构(Architecture)有两个要素:
它是一个软件系统从整体到部分的最高层次的划分。
一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。
详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。
所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和
联结器完成某一项需求。
建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。
建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。
软件开发一般比较会关注设计模式而不是架构设计,欢迎追问。
软件架构作为一个概念,体现在技术和业务两个方面。
从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上。
先说一些基本原则:
分层原则:分层是为了降低软件深度复杂性而使用的关键思想,就像社会有了阶级一样,软件有了层次结构。
模块化原则:模块化是化解软件广度复杂的必然手段,模块化的目的就是让软件分工。
接口实现分离原则随着软件模块化的不断深入改进,面向接口编程而不是面向实现编程可以让复杂度日趋增高的软件降低模块之间的耦合度,从而让各模块更轻松改进。从这个原则出发,软件也从微观进行了细致的规范化。
还有两个比较小但很重要的原则:
细节隐藏原则很显然把复杂问题简化,把难看的细节隐去,能让软件结构更清晰。其实这个原则使用很普遍,java/c++语言中的封装原则以及设计模式中的Facade(外观)模式就很能体现这个原则的精神。
依赖倒置原则随着软件结构的进一步发展,层与层之间、模块与模块之间的依赖逐渐加深,而层、模块的动态可插拔要求不端增大。依赖倒置原则可看视为接口实现分离原则的深化,根据此原则的精神,软件进入了工具时代。这个原则有点类似于知名的好莱坞法则:Don't call us, we'll call you。
以上这些原则奠定了我们的软件架构的价值指标。但软件架构毕竟是建立在当前技术之上的。而每一代技术都有架构模式。过去的不再说了,让我们就来看一下当前流行的技术,以及当前我们能采用的架构。
因为面向对象是当前最流行开发技术,且设计模式的大量使用使面向对象的走向成熟,而数据库是当前最有效的存储结构、web界面是当前最流行的用户接口,所以当前最典型的三层次架构就架构在以上几项技术的基础之上,用数据库作存储层、用面向对象来实现业务层、用web来作为用户接口层。我们从三层次架构谈起:
因为面向对象技术和数据库技术不适配,所以在标准三层次架构的基础上,我们增加了数据持久层,来管理O-R双向映射,但目前一直没有最理想的实现技术。cmp和entity bean技术因为其实现复杂,功能前景有限,已接近被淘汰的边缘。JDO及hibernate作为o-r映射的后期之秀,尤其是hibernate,功能相当完备。推荐作为持久层的首选
在业务层,因为当前业务日趋负载,且变动频繁,所以我们必须有足够敏捷的技术来保证我们的适应变化的能力,在标准j2ee系统中session bean负责业务处理,且有不错的性能表现,但采用ejb系统对业务架构模式改变太大,且其复杂而昂贵,业务代码移植性差。而spring 作为一个bean配置的轻量级架构,漂亮的IOC模式实现,对业务架构影响小,所以推荐作为中间层业务框架。
在用户结构层,虽然servlet/jsp/jstl/javaBean 能够实现MVC架构,但终究过于粗糙。struts对MVC架构的实现就比较完美,Taperstry也极好地实现MVC架构,且采用基于事件的方式,非常诱人,惜其不够成熟,我们仍旧推荐struts作为用户接口层基础架构。
因为业务层是三层次架构中最有决定意义的,所以让我们回到业务层细致地分析一下,在复杂的业务我们常常需要以下基础服务的一种或几种:事务一致 性服务acid(tool:jta/jts)、并发加锁服务concurrent&&lock、池化管理服务cache、访问控制服务(tool:jaas)、流程控制服务workflow、动态实现服务IOC,串行化消息服务(tool:jms)、负载平衡服务blance等。如果我们不采用重量级应用服务器(如weblogic,websphere,jboss等)及重量级组件(EJB),我们必须自己实现其中一些服务。虽然我们大 多情况下,不需要所有这些服务,但实现起来却非易事。幸运的是我们有大量的开源实现代码,但采用开源代码却常常是件不轻松的事。
随着xml作为结构化信息传输和存储地位日渐重要,一些xml文档操作工具(DOM,Digester,SAX等)的使用愈发重要,而随着 xml schema的java binding工具(jaxb,xmlbean等)工具的成熟,采用xml schema来设计xml文档格式,然后采用java binding来生成java bean 会成为主要编程模式,而这又进一步使数据中心向xml转移,使在中小数据量上,愈发倾向于以xquery为查询语言的xml数据库。现还有一个趋势, microsoft,ibm等纷纷大量开发中间软件如(microsoft office之infopath),可以直接从xml schema 生成录入页面等非常实用的功能。还有web service 的广泛应用,都将对软件的架构有非常重大的影响。至于面向服务架构(SOA)前景如何,三层次架构什么时候走入历史,现还很难定论。
aop的发展也会对软件架构有很深的影响,但在面向对象架构里,无论aspectJ还是jboss-aop抑是aspectWerks、 nanning都有其自身的严重问题:维护性很差,所以说它将很难走远。也许作为一个很好的思想,它将在web service里大展身手。
rdf,owl作为w3c语义模型的标志性的语言,也很难想象能在当前业务架构发挥太大影响。但如果真如它所声称那样,广泛地改变着信息的结构。那么对软件架构也会有深远影响。
单体架构架构
总的概括来说,单体架构就是应用所有的功能,只有一个代码包,开发和部署都在一起,这是一种比较传统的架构风格;当然,单体架构也有着诸多的缺点:
SOA架构
因为单体应用架构的种种缺点,已经不能再满足业务需求的时候,于是就出现了SOA架构。
SOA架构的主要思想是把应用程序的模块化组件,通过接口联系起来(接口可以独立于语言、框架、硬件、操作系统);在SOA架构中,有两个主流实现方式:
微服务架构
微服务的产生,也是由于SOA架构的一些缺点,这里再次印证了这句话,【应用架构的演进的过程通常是被业务逼出来的】。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
如何进行系统的架构设计
方法/步骤一个软件项目在需求确定后,就可以开始系统的架构设计了。架构设计不同于编写代码,需要遵循严格的语法和编程规范。它没有规范可遵循,存在即合理,适合系统开发和运行的架构就是最合理的系统架构。
系统的架构设计是在业务需求已经清晰的前提下进行的,假定在系统需求分析阶段已经确定了系统的功能和业务范围,也明确了系统运营需求。在上述需求还没有确定的情况下,不适宜开展系统的架构设计,需要回到需求分析阶段完善上述需求后再开展系统的架构设计。
系统架构就是一些模型图,模型图是人们用来理解系统和沟通的工具。这些模型图需要提供给系统相关干系人来理解系统,系统相关干系人有项目经理、产品经理、开发人员、系统运营维护人员、客户、项目投资人等。这些干系人有不同的知识背景,对同一架构模型图也会有不同的认知和理解:如果把开发架构模型图给产品经理或客户看,他们定然看不懂也不能理解;同样的道理,如果只把逻辑架构图给开发人员看,就不能正确地指导开发人员构建开发环境。
因此架构设计师在进行系统架构设计时,需要从系统的不同维度进行设计,以满足系统相关干系人理解系统架构的需求。架构设计模型主要有逻辑架构、开发架构、数据架构、物理架构和运行架构五种模型图。一般来说需要设计的系统架构模型有逻辑架构、开发架构和物理架构三种架构模型图。数据架构模型一般放在数据库中进行设计,运行架构和物理架构基本相近,只是在物理架构中加了数据的流向,因此一些系统设计使用物理架构代替了运行架构。
设计逻辑架构模型
逻辑架构模型主要是确定系统的功能范围和系统划分。在设计逻辑架构模型时,可以抓住两个关键点:一个关键点是对系统进行逻辑划分,将一个大系统划分为多个子系统;另外一个关键点是明确各子系统之间的协作和调用关系。
绘制逻辑架构的模型图有系统流程图和系统结构图:系统流程图描述了系统各子系统、相关文件和数据之间的关系,记录了整个系统的体系结构;系统结构图也称为层次图,它以层次方式描述了系统从顶层到最底层的功能分解。
下图分别是人脉系统的系统流程图和系统结构图。
上面的人脉系统流程图和人脉系统结构图就是依据人脉系统需求规格说明书给出的功能和业务范围绘制的。
设计开发架构模型
开发架构模型图是给开发人员看的,开发架构模型指导开发人员如何来架构系统的开发环境。开发环境包括系统开发框架的选型、开发工具和编程语言、模块划分等内容。下图是人脉系统开发架构模型图。
开发架构模型图给出了技术体系是B/S结构,开发框架选择SSM,开发语言是JavaEE。系统采用三层结构,分别是表示层、WEB应用层和数据层。表现层是JSP页面,在浏览器中运行,表现层是MVC的View。WEB应用层的控制层是MVC的Controller,业务逻辑层是MVC的Service,实体层是MVC的POJO。数据层由MyBaits数据库开发框架组成。
设计物理架构模型
物理架构模型是给系统部署人员和运营维护人员看的,主要给出系统的部署环境模型,包括网络环境、硬件环境和软件环境。下图是系统部署网络环境模型图。
从上面网络环境模型图中可以看出,系统部署只需要一台主机,要求支持HTTP协议和远程桌面协议。系统可以考虑部署到阿里云或腾讯云。
系统的架构设计主要涉及到三种模型图,分别是逻辑架构模型、开发架构模型和物理架构模型。逻辑架构模型一般采用系统流程图和系统结构图建模;开发架构模型没有标准的模型图,可以使用PPT或Visio绘图工具进行绘制;物理架构模型主要是由网路环境、硬件和软件环境组成。