C#模式的抽象类特定代码

我有一个抽象的“行动”的类,它已经派生类型ActionAppointment,ActionCall,ActionEmail和ActionLetter的。 我想写就会枯竭我们的服务层的功能,所以我们不会写CRUD调用5次了。

我对我们的服务层的一些更新逻辑(很多为简洁起见删除其他代码):

private IServiceResponse UpdateAction<T>(T action, string originalActionStatus) where T : Action { if (action.GetType() == typeof(Action)) { _actionRepository.Update(action); } else if (action.GetType() == typeof(ActionAppointment)) { _actionAppointmentRepository.Update(action as ActionAppointment); } else if (action.GetType() == typeof(ActionCall)) { _actionCallRepository.Update(action as ActionCall); } else if (action.GetType() == typeof(ActionEmail)) { _actionEmailRepository.Update(action as ActionEmail); } else if (action.GetType() == typeof(ActionLetter)) { _actionLetterRepository.Update(action as ActionLetter); } }

不幸的是,我们的资料库是如何设置的,我必须使用专门命名的存储库(即我不能更新通过,即使它从操作导出_actionRepository的ActionLetter)

我一直在阅读上的不同式样,它听起来像类似工厂模式的东西,但我看不出如何使它工作。

我失去了一些愚蠢的事?

--------------解决方案-------------

你不能只写每个动作类型方法的重载? 忘记<T>typeof的东西-你在做什么是实现一个内置的语言特性(方法重载)通过手,太脆弱的方式。

让我们在这里反逻辑:

abstract class Action {
protected abstract Repository GetRepository();
protected void Update(){
this.GetRepository().Update(this);
}
}

所有你需要做的是覆盖在每一个派生类的GetRepository。 例如:

class ActionAppointment : Action {
protected override Repository GetRepository() {
return _actionAppointmentRepository;
}
}

分类:C# 时间:2012-01-01 人气:1
本文关键词: 设计模式,存储库模式
分享到:

相关文章

  • LINQ到SQL与存储库模式 2012-04-24

    目前我正在试图实现LINQ在我的项目为SQL. 我试图使用LINQ到SQL与著名的存储库模式. 这里就是我试图做的事: 创建表,例如客户表. 生成的LINQ to SQL(的.dbml)为我的客户表. 它生成的部分Customer类完成所有的属性和一些局部的方法. 从那以后,我需要把一些自定义的方法,例如:GetCustomerById(INT ID),GetCustomerByName(字符串名称)等,所以我创建了客户的部分类并实现所有我需要的功能. 嗯,这一步我意识到有什么奇怪的,我还没有实

  • 有关罗布科纳的存储库模式的几个问题? 2014-01-28

    请阅读答案后阅读我在问题结尾更新: 我想申请资料库模式作为罗布科纳人根据"MVC店面 "在他的博客中描述. 但我想请教一下,我有一些问题,我将此设计模式之前. 罗布提出了自己的"模型"和使用一些ORM"LinqToSql或EF"映射了数据库实体. 然后,他使用的自定义库赋予IQueryable<myModel>并在这些仓库他做排序的映射,或者ORM之间的"解析" Entities和他的Model类. 我在问什么在这

  • 存储库模式和数据类型返回 2012-01-19

    我使用的存储库模式,并想知道什么样的数据类型,我应该回来. 在我的数据库我有一个字符串,它是可变长度需要根据关闭固定长度的被打破了. 我最初是想传递出字符串,并让服务层做基于配置的列的长度的解析. 我真的不喜欢传递一个字符串出库层的想法,宁愿传递出一个完整的对象. 传递出字符串似乎是不够的分离责任,但有不得不去别的方法来获得怎样的字符串应该被解析并做解析似乎是为回购工作太多的资源库. 什么任何建议应该在这种情况下,回购和服务的责任? --------------解决方案-------------

  • 什么是活动记录和存储库模式之间的区别? 2012-02-10

    在我看来,唯一的区别是,活动记录在数据容器类CRUD方法,和存储库模式使用的数据容器和CRUD方法单独的类,但我肯定是错的. 什么是活动记录和存储库模式之间的区别? 什么时候应该使用哪一种模式? --------------解决方案------------- 从本质上讲,你的假设是正确的. 资源库和DAO模式外化持久性问题,同时活动记录内化他们. 我确实看到了一些实施方案,其中活跃的记录类注射在内部提供其持久性的担忧存储库实例. 对使用Active Record模式最大的原因很简单,你的域对象不

  • ASP.NET MVC单元测试与存储库模式 2012-03-17

    我试图让我的脚湿asp.net MVC3和单元测试. 我创建了使用存储库模式的典范. 这里的界面: public interface IExtensionRepository { IList<Extensions> ListAll(); } 这里的仓库: public class ExtensionRepository : IExtensionRepository { private ExtensionsLSDataContext _dataContext; public ExtensionR

  • 使用EF 4和存储库模式对象查询模式 2012-04-09

    有关存储库模式和查询对象模式的问题. 我使用EF 4已经从使用ADO.NET实体POCO发电机在2010年的VS EDMX文件和TT文件(POCO类)我的数据库模型生成我POCO类是在2个不同的项目. 我的存储库是特定领域,如的DocumentRepository和UserRepository. 我的数据库模型从我的域模型的不同之处,我以一个域对象转换为一个或多个数据库表(反之亦然)来实现映射器这种程度. 一个例子是,我的文档域类建模为数据库中的3个表(因此POCO类). 你将如何在这种情况下使

  • NLOG并在存储库模式项目记录到数据库 2012-04-24

    在NLOG,目标为记录数据库,你只要输入数据库连接等,并把它连接直接到数据库并执行它的东西. 我的项目使用存储库模式,其所有访问该数据库经过存储库. 我如何设置NLOG登录使用存储库我的数据库? 我应该创建一个ILoggingRepository ? 我如何在NLOG配置中使用呢? 还是应该NLOG直做其连接到数据库,因为它的日志框架? --------------解决方案------------- 这是很好的,你与数据访问层抽象. 然而,存储库模式意味着/供你的域对象. 想记录的服务,而不是作

  • 使用实体框架4和存储库模式多层次的体系结构 2012-05-02

    我要建立使用实体框架4.1和ASP.NET Web应用程序的体系结构. 我已经有数据库结构,所以我必须使用数据库拳头. 我看了很多文章和线程在这里,但它似乎像我想的东西. 我已决定组织项​​目以下面的方式: 我已经用architecuted LINQ2SQL一个Web应用程序. 我用这个项目. 它提供了为每个实体生成一个特定的静态仓储类T4模板. 我喜欢这种方法,因为它很容易附加逻辑添加到任何资料库,如GetUserByName() 我喜欢这种方法,但我找不到EF4类似的方法为止. 我发现只有通

  • 处理与存储库模式的看法 2012-05-06

    什么是处理意见使用存储库模式(这并不代表实体,而是被使用,例如,绑定一个下拉列表类)的最好方法? 比如我有以下客户实体 public class Customer { Guid ID {get;set;} string FirstName {get;set;} string LastName {get;set;} List<Address> Addresses {get;set;} } 和库 public class CustomerRepository : IRepository<Cu

  • 如何只读数据库视图融入存储库模式? 2012-05-07

    例如:你的数据库有一个名为"CustomerOrdersOnHold"一个SQL视图. 这个视图返回特定客户和订单数据字段的过滤组合. 您需要从这一观点在应用程序中获取数据. 如何获得这样的观点融入存储库模式? 你会创建一个"CustomerOrdersOnHoldRepository"? 是只读视图像这样考虑的一个聚合根? --------------解决方案------------- 我宁愿分开读库,最好连其名称更改为Finder或阅读器,资料库是为域名的使用不

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.208 (s). 10 q(s)