SOLID 设计原则 In C# 代码实现
2014-03-23 20:05
591 查看
[S] Single Responsibility Principle (单一职责原则)
认为一个对象应该仅只有一个单一的职责namespace DependencyInversionPrinciple { interface IBankAccount { long BankNumber { get; set; } // 卡号 decimal Balance { get; set; } // 余额 } // 转账人 interface ITransferSource : IBankAccount { void CutPayment(decimal value); } // 收款人 interface ITransferDestination : IBankAccount { void AddMoney(decimal value); } class BankAccout : IBankAccount, ITransferSource, ITransferDestination { public long BankNumber { get; set; } public decimal Balance { get; set; } public void CutPayment(decimal value) { Balance -= value; } public void AddMoney(decimal value) { Balance += value; } } class TransferAmount { public decimal Amount { get; set; } public void Transfer(ITransferSource source, ITransferDestination dest) { source.CutPayment(Amount); dest.AddMoney(Amount); } } class Start { void Invoke() { ITransferSource source = new BankAccout { Balance = 10000, BankNumber = 111 }; ITransferDestination dest = new BankAccout { Balance = 1, BankNumber = 222 }; TransferAmount transfer = new TransferAmount(); transfer.Amount = 9999; // 转多少钱 transfer.Transfer(source, dest); // 开始转账 // 这是用依赖反转的思维做一个银行转账的功能,使银行账户可以依赖ITransferSource,ITransferDestination // 而不是以前直接 BankAccout account = new BankAccout();大大增加了账户这个核心对象的灵活性 // 这个例子基本上有SOLID原则的所有身影 } } // 附上一个普通版的 做下对比,用中文名做变量,通俗易懂吧 class 银行账户 { public int 卡号 { get; set; } public decimal 余额 { get; set; } public void 存入(decimal value) { 余额 += value; } public void 支出(decimal value) { 余额 -= value; } } class 银行转账操作 //ATM { public 银行账户 转账人 { get; set; } public 银行账户 收款人 { get; set; } public decimal 金额 { get; set; } public void 转账() { 转账人.支出(金额); 收款人.存入(金额); } } class Start1 { public void Main() { 银行账户 张三 = new 银行账户 { 卡号 = 111, 余额 = 10000 }; 银行账户 李四 = new 银行账户 { 卡号 = 222, 余额 = 5 }; 银行转账操作 转账 = new 银行转账操作(); 转账.金额 = 1000; 转账.转账人 = 张三; 转账.收款人 = 李四; 转账.转账(); } } }
DependencyInversionPrinciple
SOLID设计原则是个老生常谈的话题了,在博客园居然没找到良好的代码实现,所以就自己参考网上的资料写了这么一篇博客,技术含量不高,给新手看的,包括我,个人认为掌握了这五点设计原则,并熟练运用于自己的系统中还是得花点时间的。反正我的观点就是:业务领域驱动设计原则。如果你不熟悉业务领域,你根本发挥不了这其中的优点,你会认为这样做反而麻烦了,但是又对于什么设计原则什么设计模式出于崇高的敬意,把网上书上的那些例子照着敲一遍二遍三遍。。。你会的也只不过是会写各种原则,模式的代码模板而已。so,学习设计模式的好方法是先弄懂一套业务领域的逻辑,然后在用你学到的设计模式的思想去挑刺儿。领域驱动模式设计给了我很大的启发,先敬畏业务领域,再敬畏软件设计,最后敬畏代码。当然平时也要用敬畏之心去看待事物。
相关文章推荐
- c# in depth的泛型实现实例代码
- 有关《模式——工程化实现及扩展(设计模式C# 版)》一书中多个章节示例代码中缺少空格的公告
- 七条原则实现简单的代码设计
- 设计模式----单例模式UML图和代码实现(C#&JAVA)
- 6_C# 实现VMS客户端——代码架构设计
- 【出版直播】博客园征途系列,《设计模式——基于C#的工程化实现与扩展》电子书、示例代码发布,互动网预订开始
- 七条原则实现简单的代码设计
- Android群英传-拼图游戏puzzle-代码设计和实现
- C# WORD操作实现代码
- 雇佣问题原址排列给定数组(randomize In Place)-c++代码实现及运行实例结果
- OO设计原则SOLID之浅分析
- c#实现每隔一段时间执行代码(多线程)
- 状态机--C#代码实现
- C#实现DDOS攻击代码介绍
- 《模式——工程化实现及扩展》(设计模式C# 版)《桥模式 Bridge》——“自我检验"
- C# winform进度条(异步) 窗体设计代码
- C# 全过程用户权限实现策论 (3.权限与代码安全访问)
- 《设计模式:基于C#的工程化实现及扩展》学习笔记 01 准备篇 -- 前言
- 《Android之大话设计模式》设计原则 第一章:针对接口编程 不要针对实现编程