.NET Web 入门系列之架构理念

一、Web项目最简构成

1.什么是Web项目

所谓Web项目,就是一个可通过网络访问的,以浏览器为呈现载体的,可响应用户操作交互呈现数据信息的可视化程序

如下图所示:

图中的PC端即B/S架构中所谓的浏览器端,用于呈现Web页面,用户在浏览器中输入网址,经DNS解析完成后,即向解析所得IP地址对应的Server端发送http请求,Server端接收到请求后根据信息服务管理器(IIS)的部署,返回相对应的页面及加载所需的文件,若请求参数有误或无访问权限则返回错误页。

用户在Web页面上的鼠标点击、文本输入等输入操作,一般根据Web页面中的元素定义或javascript脚本自行响应,若需服务端提供数据处理等特殊的处理方式,则通过Ajax方式与Server端进行通讯及数据传输。

数据源多使用数据库,也有诸如.xls, .txt等本地文件,各自对应不同的访问方式。视业务逻辑需求,自行决定是否使用及使用何种数据源。

以上就是一个Web项目的最基本的构成。

2.涉及知识结构

二、从迭代的角度看为什么要分层

1.迭代

我们开发一个产品,如果不太复杂,会采用瀑布模型,简单的说就是先定义需求,然后构建框架,然后写代码,然后测试,最后发布一个产品。但这样的方式有明显的缺点,假如我们对用户的需求判断的不是很准确时,当你把产品拿给客户看,客户往往会大吃一惊,这就是我要的东西吗?

而此时的修改成本是和风险往往是巨大的,因此为了尽可能规避这种风险,降低修改成本,在项目实践中通常会采用迭代的方式完成开发。即在开发过程中不断与客户进行交流反馈,从而获取客户对已完成部分的修改意见,以较少的时间和人力成本进行修正,同时继续进行未完成的开发。这种通过不断反馈、不断修正以达到客户要求的开发方式,就是我们所说的迭代开发。

PS: 另一种常见的情形是客户的部分需求中途发生变更或迟迟不能确定,此时也需要开发人员做好面临修改、返工的心理准备。

2.分层

微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

  • 数据访问层:主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
  • 业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
  • 表示层:以aspx为例,提供数据展示与交互操作的页面,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

3.迭代对分层的需求

面向对象编程与面向对象编程最本质的区别,大概就在于面向对象编程中的封装与引用。这大大降低了代码量,并为继承等特性提供了基础。然而在很多初学者进行开发时,往往忘记了类的定义——对具有共同特征的事物的高度抽象,于是定义混乱,引用错纵复杂,代码冗余等屡见不鲜。例如初学者可能在每个需要执行sql语句的代码段中,定义一次sqlConnection,配置一次连接字符串,然后定义sqlCommand,于是一个项目中有多处相似的代码段,造成代码冗余,若数据库连接字符串需要修改,需要连续修改多处。

其实较好的处理方式,是将对数据库所有的操作都封装在一个Class中,以网上流传较多的sqlHelper.cs为例,内部定义增、删、查、改等对数据库的访问方法,构造方法中定义sqlConnection并执行其Open方法,将数据库连接字符串定义在config文件中,这样在各个需要执行sql语句的代码段中,只需要实例化一个sqlHelper类,然后调用相应的访问方法即可,而连接字符串需要修改时,只需要将config文件中对字符串的定义改掉,其余部分的代码都不需要调整。

由此,在代码实现过程中,将对数据库访问、修改相关的方法,统归在一个项目中,将按业务逻辑对数据进行处理的方法归在另一个项目中,表示层只包含对交互操作和对数据展示的定义,以尽可能减少某一层的修改所带来的额外工作量,不仅降低了需求变更的风险成本,也正好遵循了“低耦合高内聚”的软件设计思想。

以上即为从迭代角度,应该采取分层架构的目的——减少修改所需要的成本。

时间: 2024-08-01 19:30:04

.NET Web 入门系列之架构理念的相关文章

【Web入门系列】初探会话管理-Cookie技术

特点 会话数据保存在浏览器客户端. Cookie技术核心 1.构造Cookie对象 Cookie(String name, String value) 2.设置cookie #设置cookie的有效访问路径 void setPath(String uri) #设置cookie的有效时间 void setMaxAge(int expiry) : @设置cookie的值 void setValue(String value) : 3.发送cookie到浏览器端保存 void response.add

【Web入门系列】初探HttpServletResponse

public class ResponseServlet extends HttpServlet { /** * 1.tomcat服务器把请求信息封装到HttpServletRequest对象,且把响应信息封装到HttpServletResponse * 2.tomcat服务器调用doGet方法,传入request,和response对象 * 3.通过response对象改变响应信息 * 4.tomcat服务器把response对象的内容转换成响应格式内容,再发送给浏览器解析 * @param

04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单

Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html ? 待续.... 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单

06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布

Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html

03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素

Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 2.功能元素 1.hgroup 对网页或区段(section)的标题进行组合 2.figure <figure> 标签规定独立的流内容(图像.图表.照片.代码等等). figure 元素的内容应该与主内容相关,但如果被删除,则不应对文档流产生影响. Figcaption figure的标题 一般格式: <figure> <figcap

05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系

Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html ? ? ? ?

linux入门系列20--Web服务之LNMP架构实战

作为本入门系列最后一篇文章,将演示如何在CentOS7环境下搭建LNMP环境来构建个人博客网站. 常见搭建网站的方式有LAMP.LNMP.IIS.Nginx.Tomcat等等,本文演示比较流行的基于LNMP方式来搭建动态WEB网站. 正如前文"linux入门系列6--软件包管理之rpm和yum仓库"所述,在Linux上安装软件通常有几种方式:通过编译源码安装.通过RPM安装.通过YUM仓库安装.截至目前,前面的文章都是通过yum或rpm方式进行安装,本文演示通过源码包方式进行安装. 一

快速入门系列--WebAPI--03框架你值得拥有

接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI,其核心概念就是构建REST风格的Web服务,把一起数据视为资源,无论是服务请求或者是数据操作,与以前的SOAP和XML-RPC架构风格有很大不同.说道这,很多读者可能想到WCF中不是早都有了REST风格的服务么,为什么还需要这个WebAPI?确实如此,不过WCF中的该类型服务显得比较复杂,因为其通

OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough

好久没有更新了,实在不知道应该写一些什么内容,因为作为入门系列,实际上应该更多的是操作而不是理论,而在UI5 SDK中的EXPLORER里面有着各种控件的用法,所以在这里也没有必要再来一遍,还是看官方的用法更地道. 看一下基于最新的库所推荐的项目结构. 另外,我觉得对于初学者来说是一个非常好的消息,就是UI5版本从1.28更新到1.30以及更高之后,Tutorial系列有了重大更新,之前的Get Started->Tutorials->Application Best Practice现在改为