腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

用新一代.NET 技术构造 N 层 Web 应用

  • 2008-02-26
  • 本文字数:999 字

    阅读完需:约 3 分钟

近期,Dan Wahlin 在其博客上发表的一篇名为《 Building an N-Layer ASP.NET Application with LINQ, Lambdas and Stored Procedures 》的文章颇引人注目,该文使用.NET 3.5 版本新引入的 LINQ、Lambda 表达式实现了一个基于 Northwind 数据库的在线电子商务应用,该文同时也勾起.NET 社区对如何设计下一代 N 层应用的思考和讨论。

该应用被划分为 4 个层次,除了表现层(Presentation Layer)、业务逻辑层(Business Layer)和数据访问层(Data Access Layer)之外,抽象了一个业务模型层(Model Layer),该层用 XSD(XML Schema)定义了与具体数据访问技术无关的业务实体模型,目的是保证无论底层数据访问技术采用 LINQ to SQL 设计器生成的类型、还是自己组织 Lambda 表达式或者是直接通过访问存储过程的方式,都可以向上层应用提供模型层定义的标准动态业务实体。该示例应用的逻辑分层如下:

说明:

  • 展现层采用非异步方式的标准 ASP.NET;
  • 业务逻辑层基于模型层的对象实体,借助数据访问层 ORM 之后的关系对象完成与持久层的交互;
  • 数据访问层采用 LINQ 方式,通过访问 LINQ 设计器生成的关系对象、自定义 Lambda 表达式生成的关系对象以及借助存储过程生成的关系对象,所有关系对象按照模型层的要求生成匹配的业务实体;

部署上,业务层、模型层和数据访问层的程序集部署在 Web 服务器上,供 ASP.NET 页面的数据绑定服务端控件调用。

从技术使用上,这个示例比较适合作为 LINQ 的动手实验项目,不过如果再次审视这个项目,似乎更应该称之为“玩具”应用:

  • 计算扩展能力相对薄弱,整个体系的计算全部集中在 Web 服务器部分,而且 Business、Model、Data Access 三层间没有抽象出代理类型,因此如果不做改造的话无法把相关计算部署到其他进程或服务器内;
  • 虽然是一个业务示例,而且也牵涉面向数据的 CRUD 操作,但欠缺了有关事务性控制的内容;
  • 作为一个面向 Web 的开放式应用,在 Model 定义部分一直在采用.NET 自己的类型定义业务实体,阻滞了其他平台(J2EE、Ruby、PHP…)与之互操作的能力;
  • 因为采用标准 ASP.NET 访问二进制程序集的方式,并没有开放的服务接口,影响外部应用的进一步扩展,以及 B2B 操作的协同;考虑到 Customer 表、Country 表结构相对简单的特点,如果每个 Web 操作都需要提交,可能用户体验要逊色些,因此可以考虑增加异步处理能力;
  • 还有一个就是如果要扩展为面向实际生产的系统,可能需要增加全程的运行监控、维护和安全控制措施;
2008-02-26 05:33508
用户头像

发布了 61 篇内容, 共 75997 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

CoralCache:一个提高微服务可用性的中间件

华为云开发者联盟

数据库 微服务 中间件 内存 CoralCache

架构师week12作业

Geek_xq

了解操作系统的那些事儿,从这篇文章开始

飞天小牛肉

Java 程序员 面试 操作系统 2月春节不断更

我在春晚现场护航直播

阿里云视频云

阿里云 运维 直播 运维工程师 春晚

Serverless 躁动背后的 5 大落地之痛

阿里巴巴云原生

Serverless 微服务 开发者 云原生 k8s

第四章作业

ALone

架构师week12心得

Geek_xq

Kafka.01 - 简介

insight

kafka 2月春节不断更

诊所数字化:就诊流程标准化和产品SOP设计

boshi

数字化转型 医疗 七日更

解密协议层的攻击——HTTP请求走私

京东科技开发者

安全 HTTP

2021金三银四想进字节大厂必看:LeetCode算法收割机+算法刷题宝典

比伯

Java 编程 架构 面试 算法

拥抱云原生,Fluid 结合 JindoFS:阿里云 OSS 加速利器

阿里巴巴云原生

容器 云原生 k8s 分布式计算 调度

定制开发小程序

luluhulian

技术秘籍 | 如何简单优雅的适配textview行间距?

百度开发者中心

大前端 TextView

android进阶之光!还有人不知道什么是AndroidX的吗?通用流行框架大全

欢喜学安卓

android 程序员 面试 移动开发

最新金三银四阿里巴巴内部Java架构师面试突击面试题手册,面试前必看

Java架构追梦

Java 阿里巴巴 架构 面试 金三银四

Elasticsearch Query DSL 概述

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

android开发工程师需要学什么?360°深入了解Flutter,这原因我服了

欢喜学安卓

android 程序员 面试 移动开发

4种方法帮你解决IntelliJ IDEA控制台中文乱码问题

华为云开发者联盟

Web 虚拟机 编码 IntelliJ IDEA 控制台

竞猜商城系统软件制作

v16629866266

数据中心决策如何快人一步?一块大屏轻松实现3D数据可视化

一只数据鲸鱼

物联网 数据中心 数据可视化 IDC 机房管理

开源数据库管理系统现在比商业产品更受欢迎

PostgreSQLChina

数据库 postgresql 软件 开源社区

一文搞懂TCP的三次握手和四次挥手

不脱发的程序猿

三次握手 四次挥手 TCP/IP 网络通信协议 二月春节不断更

阿里内网热搜开发者工具在线教程推荐

阿里巴巴云原生

Java 开发者 云原生 工具 Arthas

十年再出发,Dubbo 3.0 Preview 即将在 3 月发布

阿里巴巴云原生

Java 微服务 云原生 dubbo 应用服务中间件

万字长文:解读区块链7类共识算法

华为云开发者联盟

区块链 公有链 拜占庭容错 共识算法 公式算法

DIY一款4路USB转TTL串口调试模块

不脱发的程序猿

DIY 电路设计 硬件设计 USB电路 USB转TTL

翻译:《实用的Python编程》01_07_Functions

codists

Python 人工智能 后端 数据结构与算法 函数

【LeetCode】最大连续1的个数三Java题解

Albert

算法 LeetCode 2月春节不断更

在 Kubernetes 上弹性深度学习训练利器 -- Elastic Training Operator

阿里巴巴云原生

人工智能 云计算 容器 云原生 k8s

用新一代.NET技术构造N层Web应用_.NET_王翔_InfoQ精选文章