Tag: 架构

entity framework中多个“包含”的最佳实践是什么?

假设我们在数据模型中有四个实体:Categories,Books,Authors和BookPages。 还假设Categories-Books,Books-Authors和Books-BookPages关系是一对多的。 如果从数据库中检索类别实体实例 – 包括“Books”,“Books.BookPages”和“Books.Authors” – 这将成为一个严重的性能问题。 而且,不包括它们将导致“对象引用未设置为对象的实例”exception。 使用多个Include方法调用的最佳做法是什么? 写一个方法GetCategoryById并包含所有项目(性能问题) 写一个方法GetCategoryById并发送一个包含的关系列表(可能,但似乎还不够优雅) 编写方法,如GetCategoryByIdWithBooks,GetCategoryByIdWithBooksAndBooksPages和GetCategoryByIdWithBooksAndAuthors(不实用) 编辑 :通过第二个选项我的意思是这样的: public static Category GetCategoryById(ModelEntities db, int categoryId, params string[] includeFields) { var categories = db.Categories; foreach (string includeField in includeFields) { categories = categories.Include(includeField); } return categories.SingleOrDefault(i => i.CategoryId == categoryId); } 在调用时我们需要这样的代码: Category theCategory1 = CategoryHelper.GetCategoryById(db, 5, “Books”); Category theCategory2 […]

购物车和订单中的折扣策略

我正在尝试实施一个系统,可以处理应用于我的购物车/已完成订单的多个折扣。 我已应用策略类型模式来封装折扣中的折扣处理。 我提出了以下内容:一个抽象的折扣基类,其子类构成了具体的折扣。 然后将这些应用于订单/购物车对象,并在添加到购物车/订单时处理订单/购物车的内容。 会喜欢附加代码的一些评论。 各种受保护的构造函数和成员标记为nhibernate所需的“虚拟”。 CHEV using System; using System.Collections.Generic; using System.Linq; using NUnit.Framework; namespace CodeCollective.RaceFace.DiscountEngine { [TestFixture] public class TestAll { #region Tests [Test] public void Can_Add_Items_To_Cart() { Cart cart = LoadCart(); // display the cart contents foreach (LineItem lineItem in cart.LineItems) { Console.WriteLine(“Product: {0}\t Price: {1:c}\t Quantity: {2} \t Subtotal: {4:c} \t […]

WCF:MessageContract,DataContract ……困惑?

我正在编写我的第一个WCF服务。 我决定将服务作为一个DLL开始编写,然后将WCF的内容展开,这就是我现在所处的位置。 建筑师告诉我,我应该坚持使用特定的消息对象格式。 但是我在我的消息对象中使用了Interfaces,复杂类型和列表。 我要添加属性,我有点困惑。 这是我的代码的示例。 [ServiceContract] public interface MyServiceContract { [OperationContract] MyMethodResponseMessage MyMethod(MyMethodRequestMessage request); } public class MyService : MyServiceContract { public MyMethodResponseMessage MyMethod(MyMethodRequestMessage request) { //Do things } } //Messages [MessageContract] public class MyMethodResponseMessage { [MessageBodyMember] public MyMethodResponse Body { get; set; } } [DataContract] public class MyMethodResponse { [DataMember] public IMyComplexTypeItem { […]

在C#应用程序中保护数据层

我正在考虑如何在C#应用程序中保护数据层,在这种情况下,该层可以是与应用程序本身一起存储的LINQ to SQL模型图,其中包含连接字符串到SQL Server数据库。 或者它可以是应用程序和Web服务之间的连接。 要么需要强制某种安全性,例如,应用程序中的连接字符串可以很容易地进行逆向工程,并且可以轻松地跟踪和使用Web服务,这是出于应用程序原始目的之外的其他原因。 所以我的问题是更简短的方法: 在处理Web服务和/或从Windows窗体应用程序直接连接到SQL Server时,如何解决安全问题?

有没有使用DDD(域驱动设计)的开源项目?

我正在努力理解DDD背后的概念,但我发现通过阅读书籍很难理解,因为他们倾向于以相当抽象的方式讨论这个主题。 我想在代码中看到一些优秀的DDD实现,最好是在C#中。 在开源世界中有没有很好的DDD项目实例?

用自定义DbSet / IDbSet包装DbSet ?

首先,我认为这样做有些荒谬,但是我团队的其他成员坚持认为,除了“我认为这是愚蠢的”之外,我无法提出反对它的好论据…… 我们要做的是创建一个完全抽象的数据层,然后对该数据层进行各种实现。 很简单吧? 输入entity framework4.1 … 我们的最终目标是程序员(我尽我所能只留在数据层)永远不希望暴露在具体的类中。 除了显然需要实例化工厂之外,他们只想在代码中使用接口。 我希望实现以下内容: 首先我们有所有接口的“Common”库,我们称之为“Common.Data”: public interface IEntity { int ID { get; set; } } public interface IUser : IEntity { int AccountID { get; set; } string Username { get; set; } string EmailAddress { get; set; } IAccount Account { get; set; } } public interface IAccount […]

WinForms应用程序的架构?

几个星期前我已经启动了一个WinForms项目,因为我真的不知道我想要什么function,所以我只是在路上添加它们。 这现在引起了一个可怕的混乱,我的MainForm是一个很大的泥球,例如一些重要的状态变化是由UI元素触发到我必须调用控件的OnChange事件,以便更改数据库中的某些状态。 简而言之:我刚刚开始了一个新项目,我希望采取更好的方法。 我只是不知道哪个是“好的”。 在ASP.net MVC中,我发现MVVM模式非常有用,但在桌面上,MVVM似乎只适用于WPF,而不适用于WinForms。 另一种方法是三层架构:我有我的数据库类,它目前直接与UI对话。 我现在创建一个新的静态类(“ApplicationState”),它与数据库进行通信并触发事件,告诉用户界面“嘿,有些东西改变了!”。 UI将操纵State,然后将处理数据库持久性,并在UI需要更新时再次引发事件。 这里的要点是ApplicationState类永远不会直接修改UI,但是UI订阅了Events。 这看起来像干净/“MVC-y”的方式,但也许我在这里忽略了什么? 基本上我的最终目标是让UI完全独立于数据库层,以确保我不再将业务逻辑连接到UI。

XML Serialize boolean为0和1

XML Schema Part 2指定定义为boolean的数据类型的实例可以具有以下合法文字{true,false,1,0}。 例如,在反序列化时,以下XML将布尔属性“Emulate”设置为true 。 1 但是,当我将对象序列化回XML时,我得到的是true而不是数值。 我的问题是,有没有办法可以控制XML中的布尔表示?

XML Schema – 在XML中的位置列出允许的属性/标签

有没有办法在XML中的某个点查询XmlSchema或XmlSchemaSet以获取可用标记/属性的列表? 所以说我的光标在和 ,我的模式只允许在那里使用元素,我可以用C#内置的任何东西来解决这个问题吗?

应该将用户的帐户余额存储在数据库中还是动态计算?

用户的帐户余额是应该存储在数据库中还是动态计算? 为了获得准确的结果,计算它是动态有意义的,但是当有很多用户并且数据库变得非常大时,它可能是一个问题? 交易 Id(PK) 帐户ID 类型 约会时间 量 etc..etc … 账户余额 TransactionId(PK / FK) 余额