从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~三 分部类是否破坏了单一职责...

一 DBContext的构造方法,方法的重载

二 DBContext实例中,表实体对象是怎么被加入的

三 分部类是否破坏了单一职责

四 分部方法从另一方面定义了类型的操作规范

五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged

六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作

 

 

先来看一下“百度百科”对单一职责的定义: 一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。

分部类(Partial)也算是.net的一种新东西,没有记错应该是在2.0的时候出现的,MSDN上的定义是:

可以将类或结构、接口或方法的定义拆分到两个或多个源文件中。 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。

我的理解是:当一个类在一个时间期间不能完成或不确定完成这个类的所有功能时,可以先将这个类定义成partial,它允许你在另一个地方去对同一个类进行补充,这种技术微软在linq to sql上大大的采用,当然,由于种种原因,这种使用被一些人看来是破坏了类的单一职责原则,其实,在我看来,这只是对同一职责的类,进行的一个补充,类要完成的还是那些事,只是原来不确定要干什么,或者怎么去干,而当它知道如何去实现时,可以定义一个partial,去完善它。linq to sql的代码由IDE自动生成,所以有些东西对于开发人员是不够的,而微软当然知道这一切,所以将它设计成partial,以便让程序员根据自己的需要对类进行补充,而不是扩展。

 1     [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Web_ExceptionLog")]
 2     public partial class Web_ExceptionLog : INotifyPropertyChanging, INotifyPropertyChanged
 3     {
 4 
 5         private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
 6 
 7         private string _ExceptionID;
 8 
 9         private string _FullInfo;
10 
11         private string _Senders;
12 
13         private string _HttpMethod;
14 
15         private System.DateTime _OccurTime;
16 
17        // ……

 

这是IDE自动生成的linq to sql的一个实体对象,我们希望将这个类进行补充,之后的代码如:

 
 1 public partial class Web_ExceptionLog : Entity.EntityBase
 2    {
 3        protected override object[] PrimaryKey
 4        {
 5            get { return new object[] { this.ExceptionID }; }
 6        }
 7 
 8        public override IEnumerable<RuleViolation> GetRuleViolations()
 9        {
10            throw new NotImplementedException();
11        }
12    }
 

 

 

所以说,分部类破坏了类型的单一职责是不准确的,就像好的东西,在不同的人手中所表现出来的力量也是不同的,道理是一样的。呵呵。

转载于:https://www.cnblogs.com/lori/archive/2012/03/26/2418816.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Makefile中支持的函数大全

From: http://blog.chinaunix.net/uid-25365622-id-3056374.html 一.描述 Makefile的函数调用&#xff0c;很像变量的使用&#xff0c;也是以“$”来标识的&#xff0c;其语法如下&#xff1a; $(<function> <arguments> ) 或是 ${<function> <argum…

[react] 和Component两者的区别是什么

[react] 和Component两者的区别是什么 组件的state或者props更新都会触发render(),同时也会导致子组件render()重新渲染&#xff1b;当我们不想子组件更新时&#xff0c;需要手动在shouldUpdateComponent当中返回false;pureComponent帮我们做了这部分工作 个人简介 我是歌谣…

还是引用

1 #include <iostream>2 using namespace std;3 4 int getA1()5 {6 int a;7 a 10;8 return a; //复制一份交给主函数相关变量,然后自己消失,只是返回一个值,可能存在于除内存外的其他地方.9 } 10 11 int& getA2() 12 { 13 int a; 14 a 10; 15…

Nginx+Php(FastCGI、Php-fpm)+Mysql+Zend+Memcache+Phpmyadmin+MongoDB+TT安装

源码包下载 wget http://www.monkey.org/~provos/libevent-1.2.tar.gz wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.0-rc2.tgz wget http://blog.s135.com/soft/linux/nginx_php/rpm/x8…

[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?

[react] 如何解决引用类型在pureComponent下修改值的时候&#xff0c;页面不渲染的问题&#xff1f; 不要在state或者props当中修改数组或者对象 通过使用es6的assign方法或者数组的扩展运算符或者使用第三方库&#xff0c;强制返回一个新的对象 (页面为什么不渲染) 是因为组件…

Makefile中自定义函数的调用

From: http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320589.html 自己学习脚印&#xff0c;不喜勿喷&#xff0c;谢谢 ~ Makefile中函数定义&#xff1a; external/genext2fs/Config.mk # $(1): src directory # $(2): output file # $(3): label (if any) # $(4): …

python selenium ---键盘事件

转自&#xff1a;http://www.cnblogs.com/fnng/p/3258946.html 本节重点&#xff1a; l 键盘按键用法l 键盘组合键用法l send_keys() 输入中文运行报错问题键盘按键键用法&#xff1a; #codingutf-8 from selenium import webdriver from selenium.webdriver.common.keys impor…

Android.自定义控件的实现 (转载)

尊重他人劳动成果&#xff0c;转载请注明出处。 转自&#xff1a;http://kandy0619.blog.163.com/blog/static/64344345201012325939280/ 可能是一直都在做Web的富客户端开发的缘故吧&#xff0c;在接触Android之后&#xff0c;发现其控件实在惨不忍睹&#xff08;不知道是否说…

React-Router面试题汇总

[react-router] React-Router怎么获取URL的参数&#xff1f; [react-router] 在history模式中push和replace有什么区别&#xff1f; [react-router] React-Router 4中&#xff1c;Router&#xff1e;组件有几种类型&#xff1f; [react-router] React-Router怎么设置重定向…

Eclipse中使用自己的makefile管理工程

From: http://blog.csdn.net/whz_zb/article/details/7101164 我用的环境&#xff1a; &#xff08;1&#xff09;系统&#xff1a; Ubuntu 11.04 &#xff08;2&#xff09;Eclipse CDT 1. 在建立工程的时候选择makefile工程。 2.将makefile文件和你写好的工程文件&#x…

Spring MVC遭遇checkbox的问题解决方式

Spring MVC遭遇checkbox的问题是&#xff1a;当checkbox全不选时候&#xff0c;则该checkbox域的变量为null&#xff0c;不能动态绑定到spring的controller方法的入參上&#xff0c;并抛出异常。 解决方式&#xff1a; 1、javascript方式提交&#xff0c;提交前拼提交參数串。拼…

[Redux/Mobx] redux和flux的区别是什么?

[Redux/Mobx] redux和flux的区别是什么&#xff1f; Flux: Store 包含状态和更改逻辑有多个 Store所有 Store 都互不影响且是平级的有单一调度器React 组件订阅 store状态是可变的 Redux: Store 和更改逻辑是分开的只有一个 Store带有分层 reducer 的单一 Store没有调度器的…

[转载]Python量化交易平台开发教程系列0-引言

原文出处&#xff1a;http://vnpy.org/2015/03/04/20150304_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%970-%E5%BC%95%E8%A8%80/ 为什么用Python来开发量化交易平台 目前本人所在的公司一共有三款平台…

如何在 Ubuntu 12.04 Server 中安装图形用户界面

From: http://blog.163.com/crazy20070501126/blog/static/12865946520128301144531/ 使用ubuntu server安装lamp主机非常的方便&#xff0c;只要在安装系统的步骤中选择就是了 。但是很多时候我需要在图形界面下管理主机更加方便。今天的教程就是教大家安装图形界面。 【方法…

[Redux/Mobx] 在redux中,什么是store?

[Redux/Mobx] 在redux中&#xff0c;什么是store&#xff1f; 单一数据源&#xff0c;整个应用数据保存的地方 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

flask-whooshalchemy需要注意的一点

在学习mega—tutorial时全文搜索模块遇到了问题&#xff0c;那就是使用全文搜索查询出来的数据为空的列表&#xff0c;输出了sql语句后发现where后没有条件&#xff0c;困扰了许久&#xff0c;后来才发现是自己不细心&#xff0c;在进行全文索引时应该将数据库中的数据删除&…

[Redux/Mobx] Redux由哪些组件构成?

[Redux/Mobx] Redux由哪些组件构成&#xff1f; (这道题应该本意是Redux由哪些部分组成) State&#xff1a;Redux中的数据Reducer&#xff1a;这是Redux的核心&#xff0c;内部处理接受到action后到返回新的state的逻辑&#xff1b;reducer可以进行嵌套&#xff0c;一个store…

linux下添加用户的命令--useradd

From: http://hi.baidu.com/amenmen/item/010142991caf6bd87b7f0101 给你一整比较完整的方案你试下&#xff0c;看有用没。。 [rootlinux ~]# useradd [-u UID] [-g initial_group] [-G other_group] \ > -[Mm] [-c 说明栏] [-d home] [-s shell] username 参数&…

Maven实战(Maven+Nexus建立私服【Linux系统】)

准备工作 下载及配置Maven3&#xff1a;http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html 下载Nexus&#xff1a;http://nexus.sonatype.org/downloads/ 安装配置Nexus Nexus提供了两种安装方式&#xff0c;一种是内嵌Jetty的bundle&#xff0c;只要你有JRE…

[Redux/Mobx] 在React中你是怎么对异步方案进行选型的?

[Redux/Mobx] 在React中你是怎么对异步方案进行选型的&#xff1f; 小项目使用简单的redux-thunk方案,增加的代码量极少&#xff0c;只有两个api&#xff0c;上手成本低大项目使用基于redux-saga的dva.js&#xff0c;它简化了redux-saga的操作&#xff0c;使用上更加直观&…