如果我们写了一个存储过程,比如叫做delete_dept,功能非常简单——就是删除指定id的部门:
CREATE PROCEDURE [dbo].[delete_dept]
@id int
AS
delete from dept where id=@id
RETURN 0
那么这样的存储过程,我们应该在代码中如何调用呢?
现在的大部分做法都是采用一个封装的函数,传递存储过程名称、参数为函数的参数。还是以这个存储过程为例,假设方面名称为RunProc,那么调用的方法就是:
RunProc("delete_dept",1);
这是最简单的,也是最容易想到的做法。为了方便我们给它取个名字:RunProc方法,可是直观的做法,不一定适合大型的产品工程。在客户端代码中,如果能够这样做,是不是更好:
delete_dept(1);
为了方便,也给它取个名字:LocalFunction方法。为此我们只需要实现一个函数就行了:
void delete_dept(int id)
{
RunProc("delete_dept",id);
}
尽管代码是等效的,代码的可读性也差不多,但是从架构角度看,后者要比前者要好,因为后者改善了不同层次代码的耦合关系。既然谈到了关系,我们用图的方式来看更好。看看数据库层和应用层的耦合关系的对比:
可是连接不仅仅没有减少,反而多了一个啊?也许你要提出这样的疑问。这里最重要的点在于,层之间的耦合减少了。从原来的3个到现在的1个。层之内的联系可以多,这就叫做内聚,层之间的调用要少,这就叫做低耦合。这是高内聚低耦合的一个基本原则。尽管客户代码层之间的耦合多了,但是可以充分利用类的封装、继承、多态等特性,从而让代码更清晰。我们来看看好处:
a. Sql和c#是不同类型的,本来应该有隔离层
b. 让存储过程和函数调用一致,从而对客户端代码更加友好
c. 同类的存储过程封装函数都可以放到一个类内,做好归类工作
d. 调用都会转成强类型
不仅如此,更加重要的是,这样做了后,对变化的适应能力更强,这个内容下一篇再讲。待续。
分享到:
相关推荐
SAP best practise part 3
SAP Best Practise part1
sap best practise 50097738_SAP_BP_Baseline_Package_v1-V2.603
- **定义索引**:了解如何创建有效的XML索引,以加速查询过程。 - **在XML查询中使用索引**:掌握如何在XQuery和SQL/XML查询中利用索引,提高查询效率。 ### 更新XML数据的策略 - **简单XML更新**:提供基本的更新...
HBase在不同版本(1.x, 2.x, 3.0)中针对不同类型的硬件(以IO为例,HDD/SATA-SSD/PCIe-SSD/Cloud)和场景(single/batch, get/scan)做了(即将做)各种不同的优化,这些优化都有哪些?如何针对自己的生产业务和...
《J2EE最佳实践》是Java企业级应用开发的重要指南,涵盖了从设计、开发到部署的一系列关键知识点。本文将深入探讨这些最佳实践,旨在帮助开发者优化J2EE应用程序的性能、可维护性和扩展性。 1. **模块化设计**:在...
本篇文章基于《Oracle 10g HA Best Practise》一书的关键信息,旨在深入探讨Oracle 10g数据库在高可用性(High Availability, HA)方面的最佳实践。书中介绍了如何通过Oracle 10g的高级功能来减少计划维护操作期间的...
在IT行业中,"poc_practise:样品回购"这个标题和描述可能指的是一个安全漏洞验证项目,其中“POC”通常代表Proof of Concept(概念验证),是安全研究人员用来证明某个漏洞确实存在的一个小演示或代码片段。...
在本实践项目“practise:proteas的编程实践”中,我们将深入探讨Proteas的编程技术,尤其侧重于使用C语言进行开发。Proteas是一个可能涉及生物信息学、模拟或数据分析的系统,因为通常在这些领域中会用到特定的编程...
HTTPS是HTTP协议的安全版本,通过SSL/TLS协议加密通信,确保数据在传输过程中不被窃取或篡改。在使用jQuery进行HTTPS通信时,我们需要关注跨域安全、证书验证和HTTPOnly cookies等问题。跨域请求需遵循同源策略,但...
本文档详细介绍如何通过结合使用Oracle Database 10g中的自动存储管理(ASM)功能与富士通ETERNUS存储系统来构建高效且易于管理的数据库环境。该文档主要涵盖了以下几个方面: #### 1. 引言 - **背景介绍**:自动...
4.数据存储 mysql github.com/go-sql-driver/mysql github.com/go-xorm/xorm redis github.com/garyburd/redigo/redis influxDB github.com/influxdata/influxdb/client/v2 5.消息中间件 rabbitMQ github....
这个"JS-Practise:JavaScript范例"项目,显然是一份用于学习和实践JavaScript编程技巧的资源集合。下面我们将深入探讨JavaScript的关键知识点,并结合实际例子来帮助理解。 1. **基础语法** JavaScript的基础语法...
《dojo toturial with design best practise》是一本深入探讨Dojo框架并结合设计模式实践的书籍。这本书旨在帮助开发者不仅掌握Dojo库的基本用法,还能理解如何在实际项目中运用设计模式,以提高代码质量和可维护性...
在本项目"Api_Practise:C#_Api_Practise"中,主要涉及的是使用C#编程语言进行API(应用程序接口)的实践操作。API是软件系统之间交互的桥梁,它允许不同的应用共享数据和服务,从而提升开发效率和系统的互操作性。...
1. **模块化(Modules)**:C++20引入了模块化,它允许程序员将代码组织成独立的单元,提高了编译速度和代码的封装性。模块接口文件(.cppm)定义了对外暴露的实体,而模块实现文件(.cpp)则包含实际的实现。 2. *...
"arti_practise:建筑学"这个主题涵盖了使用计算机辅助设计(CAD),建筑信息模型(BIM),以及相关的软件工具来创建、管理和协作建筑项目。下面将详细讨论这一领域的关键知识点。 1. **计算机辅助设计(CAD)**:...
标题中的“DSA--PRACTISE”指的是数据结构与算法的实践,这通常涉及到计算机科学的基础领域,特别是软件开发。在这个存储库中,作者显然热衷于通过解决不同平台上的问题来提升自己的数据结构和算法技能,如GFG...
"Code-Practise: 提高编码技巧"的主题旨在帮助开发者通过实践来提升自己的编程能力。下面,我们将深入探讨一些关键的Python编程知识点,以及如何通过实践来优化和提升这些技能。 1. **代码规范**:遵循PEP 8,这是...
在"practise-master"这个压缩包中,我们可以期待一系列的练习题目或者小型项目,这些都是为了帮助我们提高JavaScript编程技能。这些练习可能涵盖基础语法、变量、数据类型、控制流(如条件语句和循环)、函数、对象...