.net 的动态语言实现DCI架构模式的角色混入
来源:互联网 发布:ios数据存储方式 编辑:程序博客网 时间:2024/05/01 02:34
DCI机构模式实现很重要的一个特性就是同一个PPT在不同context中的Role混入。
若采用Scala可以很好的支持此特性。
C#是否也可以支持此特性吗?
答案当然是肯定的。那就是采用.net 4.0 dynamic
我们看下面这个例子
在家时候,老公和老婆是父母角色,具有洗菜做饭的职责。
在单位时候,老公是售前支持角色,对外宣讲公司产品,老婆是室内设计师,进行公司室内装修设计
void Main(){List<People> peoples = new List<People>(){new People(PeopleName.老婆.ToString()),new People(PeopleName.老公.ToString())};List<Role> roles = new List<Role>(){new Chef(),new Assitant(),new SaleSupporter(),new DrawDesigner()};Console.WriteLine("---------------在家场景---------------");AtHomeContext home = new AtHomeContext();home.Intial(peoples,roles);home.AssignRole();home.Cook("白菜");Console.WriteLine("---------------上班场景---------------");InOfficeContext office = new InOfficeContext();office.Intial(peoples,roles);office.AssignRole();office.DoWork();}
执行结果如下:
---------------在家场景---------------
老公在家洗白菜
老婆在家炒白菜
---------------上班场景---------------
老公在单位编写公司新产品幻灯片,客户那里宣讲公司新产品的幻灯片
老婆在单位进行2居室地中海风格的室内设计
场景类
public abstract class Context{public List<People> peoples {get;private set;}public List<Role> roles {get;private set;}public void Intial(List<People> peoples,List<Role> roles){this.peoples = peoples;this.roles = roles;}public abstract void AssignRole();}public class InOfficeContext:Context{People 老婆 , 老公;Role supporter,designer;public override void AssignRole(){老婆 = peoples.Where(p => p.Name == PeopleName.老婆.ToString()).FirstOrDefault();老公 = peoples.Where(p => p.Name == PeopleName.老公.ToString()).FirstOrDefault();supporter = roles.Where(r => r.GetRole == RoleType.SaleSupporter).FirstOrDefault();designer = roles.Where(r => r.GetRole == RoleType.DrawDesigner).FirstOrDefault();老婆.Role = designer;designer.People = 老婆;老公.Role = supporter;supporter.People = 老公;}public void DoWork(){老公.Role.PearchProductPPT("公司新产品"); 老婆.Role.Draw("2居室地中海风格"); }}public class AtHomeContext:Context{People 老婆 , 老公;Role chef,assitant;public override void AssignRole(){老婆 = peoples.Where(p => p.Name == PeopleName.老婆.ToString()).FirstOrDefault();老公 = peoples.Where(p => p.Name == PeopleName.老公.ToString()).FirstOrDefault();chef = roles.Where(r => r.GetRole == RoleType.Chef).FirstOrDefault();assitant = roles.Where(r => r.GetRole == RoleType.Assitant).FirstOrDefault();老婆.Role = chef;chef.People = 老婆;老公.Role = assitant;assitant.People = 老公;}public void Cook(string food){老公.Role.WashFood(food);老婆.Role.Cook(food);}}
PPT类
public class People{public People(string name){Name = name;}public string Name {get;private set;}public dynamic Role {get;set;}}public enum PeopleName{老婆,老公}
角色类
public abstract class Role{public People People{protected get;set;}public abstract RoleType GetRole{get;}}public class Chef:Role{public void Cook(string food){Console.WriteLine(base.People.Name + "在家炒" + food);}public override RoleType GetRole{get{return RoleType.Chef;}}}public class Assitant:Role{public void WashFood(string food){Console.WriteLine(base.People.Name + "在家洗" + food);}public override RoleType GetRole{get{return RoleType.Assitant;}}}public class SaleSupporter:Role{public void PearchProductPPT(string product){Console.WriteLine(base.People.Name + "在单位编写" + product + "幻灯片,客户那里宣讲" + product + "的幻灯片"); }public override RoleType GetRole{get{return RoleType.SaleSupporter;}}}public class DrawDesigner:Role{public void Draw(string product){Console.WriteLine(base.People.Name + "在单位进行" + product + "的室内设计");}public override RoleType GetRole{get{return RoleType.DrawDesigner;}}}public enum RoleType{Chef,Assitant,SaleSupporter,DrawDesigner}
- .net 的动态语言实现DCI架构模式的角色混入
- 0014.trait的混入
- 软件架构的角色
- DCI: 代码的可理解性
- DCI: 代码的可理解性
- Scala特质的混入顺序
- javascript面向对象的混入
- 基于角色的安全控制的架构的实现实例
- 规则架构师的角色
- 规则架构师的角色
- 软件架构角色的职责
- DCI模型架构
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- 外网访问内网服务器教程
- EL表达式replace缺陷
- jquery-autocomplete的用法及参数
- C#中params关键字的作用理解
- 如何在tableView的数据源和代理事件之外获取当前点击的是哪一行
- .net 的动态语言实现DCI架构模式的角色混入
- 编写Android的exe可执行文件并运行
- spin
- const使用
- 问题合集 ------- 用 Eclipse 平台进行 C/C++ 开发
- C++ 第十周任务-输出完数
- 关于sqlplus和sqlplusw
- SMM系列(1)-- SMM基本概念
- 黑马程序员—C#异常和异常处理