Tag: domain driven design

没有数据库的unit testing:Linq to SQL

我有一个使用LINQ to SQL实现的存储库。 虽然我没有数据库,但我需要进行unit testing。 如何为FreezeAllAccountsForUser方法编写UT? 你能用手动模拟来展示一个例子吗? 注意:域对象中使用了inheritance映射 注意:unit testing将使用Visual Studio Team Test完成 来自@StuperUser的评论。 unit testing涉及将代码与其交互的其他对象完全隔离。 这意味着如果代码失败,您可以确定失败是与测试中的代码有关。 要做到这一点,你必须伪造这些对象。 码 public void FreezeAllAccountsForUser(int userId) { List bankAccountDTOList = new List(); IEnumerable accounts = AccountRepository.GetAllAccountsForUser(userId); foreach (DBML_Project.BankAccount acc in accounts) { string typeResult = Convert.ToString(acc.GetType()); string baseValue = Convert.ToString(typeof(DBML_Project.BankAccount)); if (String.Equals(typeResult, baseValue)) { throw new Exception(“Not correct […]

多态性:ORM实体是域实体还是数据实体?

我有一个BankAccount表。 LINQ to SQL生成一个名为“BankAccount”的类,如下所示。 [global::System.Data.Linq.Mapping.TableAttribute(Name=”dbo.BankAccount”)] public partial class BankAccount : INotifyPropertyChanging, INotifyPropertyChanged 现在,作为一个新手,我自己新创建域对象。 请参阅IBankAccount接口和FixedBankAccount类。 关键点在于存在多态行为–IBankAccount可以是FixedBankAccount或SavingsBankAccount。 对于这个例子的另一个问题,我有以下两条评论。 @mouters:“你的存储库对象和域对象很奇怪 – 你的存储库是不是只返回域对象?” @SonOfPirate:“存储库应该使用工厂来根据从数据存储中检索的数据创建实例。” 质询 1)我手动创建域实体。 这是错误的方法吗? 如果是错的,LINQ to SQL类如何处理多态? 如何将方法添加到这些类? 2)存储库应如何使用工厂根据从数据存储中检索的数据创建实例? 任何代码示例或参考? 3)它是否满足单一责任原则? 码 public interface IBankAccount { int BankAccountID { get; set; } double Balance { get; set; } string AccountStatus { get; set; } void FreezeAccount(); […]

获取对象内的所有关联/复合对象(以抽象方式)

业务 : 我有一个支付系统,可以通过GiftCoupon,ClubMembershipCard等支付。一个支付本身可以有多个支付组件 分类 : 我有一个付款类。 它有支付组件,如GiftCouponPayment,ClubMembershipCardPayment,CashPayment等。 每种组件类型都满足通用接口IPaymentComponent。 我使用有关现有类型的知识实现了它。 问题 1)如何以抽象的方式实现这个function – 不知道存在哪些类型? 这意味着它需要适用于实现IPaymentComponent接口的所有类型。 2)如果无法在LINQ to SQL中实现它,是否可以在Entity Framework中实现? 3)当LINQ to SQL在Payment对象中生成GiftCouponPayment实体时,它是关联/聚合还是组合? 注意:我使用LINQ to SQL作为ORM。 GiftCouponPayment和Payment是自动生成的类,这些对象由ORM创建。 我通过使用部分类为这些类添加了更多function。 注意:在数据库中,每个PaymentComponent(例如GiftCouponPayment)都有自己的属性(例如CouponValue,CardValue等)。 因此,每层次表不会很好 。 我们需要单独的表格。 那条线路有解决方案吗? 注意:此付款之前,数据库中已存在GiftCouponPayment。 我们需要使用客户提供的GiftCouponPaymentID来识别GiftCouponPayment对象。 我们只需要更新此表中的PaymentID列。 泄漏抽象是指任何已实现的抽象,旨在减少(或隐藏)复杂性,其中底层细节未被完全隐藏 LINQ to SQL Diagram 参考 : entity framework4,inheritancevs扩展? 如何选择inheritance策略http://blogs.msdn.com/b/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx 流畅的API示例 – http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx C#代码 public interface IPaymentComponent { int MyID { […]

使实体类关闭以进行更改

我有一个数据库关系,如下所示。 域对象是基于LINQ to SQL ORM创建的。 付款包括现金付款和礼品券付款。 假设购买总额为550.可以按以下组件支付 1 Gift Coupon Valued 300 1 Gift Coupon Valued 200 I Cash Currency Valued 50 我正在使用ORM的“InsertOnSubmit”function插入新的付款记录。 以下代码工作正常。 但是,如果我公司使用信用卡引入新的支付组件,我需要更改我的“付款”域类。 如何使支付类打开以进行扩展并关闭仍在使用ORM的 更改 ? 注意:Payment类具有行为 (例如GetTotalAmountCollected)。 我正在努力使“付款”类满足OCP。 注意:优惠券类型有特定的行为 。 优惠券发行日期是否小于2000年1月1日,不应用于计算总金额(即,CouponValue应为零)。 请参阅使用策略模式重构代码 。 注意:我使用的是.Net 4.0 参考: 将ObjectContext.AddObject与Entity Framework一起使用时出错 使用策略模式重构代码 喜欢构成而不是inheritance? 代码优先与模型/数据库优先 使用Unity的策略模式和dependency injection 委托与OOP的C#策略设计模式 如何在C#中使用策略模式? EF代码优先inheritance:第2部分 – 每种类型的表(TPT) http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first -ctp5部分-2-表每类型tpt.aspx C#代码: public […]