Tag: 架构

将datarow提取到c#对象

我有一个类Item表示列表中的项目。 我有函数调用返回datatable的存储过程,我需要将数据表转换为项目数组。 这是我做的: public class Item { private string _ItemIdDataName = “item_id”; private string _ItemNameDataName = “item_name”; private string _PriceDataName = “price”; public long ItemId { get; set; } public string ItemName { get; set; } public float Price { get; set; } private Item(DataRow row) { if (row != null) { ItemId = long.Parse(row[_ItemIdDataName].ToString()); […]

使用3层体系结构validationASP.NET MVC应用程序中的业务规则的更好方法是什么?

我正在开发一个带有3层经典架构的ASP.NET MVC应用程序1.数据访问(Repositories)2。业务逻辑(Services)3。应用层(MVC Controller类)任务是遵循领域类Learner和学习者可以参加考试,参加考试会产生一个订单(订单类),之后学习者参加考试,我们需要为每个学习者发布考试成绩(这意味着给出一个分数和成绩)并且有一些需要的商业规则已validation1.结果尚未发布2.所有有身份的学员都应该有标记3.应该确认评分边界(考试的分数和等级)当用户确实发布结果时,所有这些规则应该validation,如果有一些规则不满意应该显示错误信息。 我决定所有与validation业务规则相关的逻辑都保留在Service类中,如果任何规则没有传递抛出特定exception,则在控制器类中,此exception将捕获并向客户端显示错误。 这是代码 服务类 public void ReleaseResults(long orderId) { var order =orderRepository.Get(orderId); Check.Require(order != null, “Order was not found”); if (IsOrderReleased(order)) { throw new ReleaseResultsException(“The results has been already released”, order.OrderNo); } if (AllLearnersHasStatusPresentAndMark(order)) { throw new ReleaseResultsException(“One or more learners unmarked”, order.OrderNo); } if (!GradingBoundaryConfirmed(order)) { throw new ReleaseResultsException(“The Grading boundary needs […]

获取表的架构

给定一个SQLConnection对象,如何获得单个表的模式? 前几天我正在尝试这个,我似乎能够从运行查询得到的DataSet中获取模式,但是我从连接中获得的所有模式信息似乎都与可用的表有关而不是表格的实际细节。 我确信有一种简单的方法可以做到这一点。

洋葱建筑中的典型层次是什么?

我目前正在研究域驱动设计,并尝试将其应用于WPF项目。 我观看了一些教程video,并阅读了很多文章,例如: 同一层中的洋葱架构依赖关系:基础架构和Web通信 http://eohmicrosoft.blogspot.fr/2012/08/laying-it-out-onion-architecture.html 域驱动设计:域服务,应用服务 我理解对接口和控制反转的关注。 我读到有一些经常出现的层名(领域/核心用于表示知识领域,基础设施用于持久性,应用程序用于……我不明白),但它们会根据我阅读的文章而改变。 有些人甚至没有出现。 是否有可能拥有一个理论上在洋葱架构中需要面对所有需求和问题的所有层的列表,它们的意图(它们包含什么样的代码,它们试图满足什么样的需要) ,他们需要参考哪一层),好吗?

我的Entity Framework存储库和服务层方法应返回哪些类型:List,IEnumerable,IQueryable?

我有一个具体的存储库实现,它返回实体的IQueryable: public class Repository { private AppDbContext context; public Repository() { context = new AppDbContext(); } public IQueryable GetPosts() { return context.Posts; } } 然后,我的服务层可以根据其他方法(其中,分页等)的需要执行LINQ 现在我的服务层设置为返回IEnumerable: public IEnumerable GetPageOfPosts(int pageNumber, int pageSize) { Repository postRepo = new Repository(); var posts = (from p in postRepo.GetPosts() //this is IQueryable orderby p.PostDate descending select p) .Skip((pageNumber – […]

多表单应用程序显示和隐藏表单的最佳实践?

StackOverflow上有很多问题,询问如何隐藏Form1并显示Form2。 并且,通常会出现一些不同的答案: 1) // Program.cs Application.Run(new Form1()); // Form1.cs Form2 form2 = new Form2(); form2.Show(); this.Hide(); 2) // Program.cs Form1 form1 = new Form1(); Form2 form2 = new Form2(); form1.Show(); form2.Show(); Application.Run(); …etc.. 我不是在寻找像#1这样简单的一次性解决方案。 我正在寻找最佳的表单管理实践。 一个5-8种forms的应用程序,经常打开和关闭 – 管理这些表单的最佳方法是什么? 我的想法是让每个表单成为一个(懒惰?)Singleton并将它们埋没在某种FormsManager类中(比如解决方案#2但是++)。 然后单个表单可能会调用类似FormsManager.GetForm() 。 但我想知道有更多经验的人使用过什么。 同样,这些解决方案不应该是快速破解。 它们应该是面向设计的 ,可能是架构的 ,也是长期的解决方案 。 编辑: 对于可能遇到同样问题的人来说,这是一个非常通用的问题(因此要求非常开放)。 具体到我的情况,我不需要在启动时显示多个表单。 另外,我没有MDI表格。 我可能有一些模态forms,但它们大多是非模态的。

大智能ViewModels,哑视图和任何模型,最好的MVVM方法?

下面的代码是我之前的MVVM方法的重构( Fat Models,瘦的ViewModels和dumb Views,最好的MVVM方法? ),其中我将逻辑和INotifyPropertyChanged实现从模型转移回ViewModel 。 这更有意义,因为正如所指出的,您经常必须使用您无法更改或不想更改的模型,因此您的MVVM方法应该能够使用任何模型类,因为它碰巧存在。 此示例仍允许您在Visual Studio和Expression Blend中以设计模式查看模型中的实时数据 ,我认为这很重要,因为您可以拥有设计器连接的模拟数据存储,例如最小和最大的字符串。 UI可能会遇到,以便他可以根据这些极端情况调整设计。 问题: 我有点惊讶我甚至不得不在我的ViewModel中“放一个计时器”,因为它似乎是INotifyPropertyChanged的一个function,它似乎是多余的,但这是我可以不断获得XAML UI的唯一方法(一次)每秒)反映我的模型的状态。 因此, 如果您遇到任何不利因素 ,例如使用线程或性能, 那么听到任何可能采用这种方法的人都会很有趣 。 如果您只是将XAML和代码复制到新的WPF项目中,则以下代码将起作用。 XAML: 代码背后: using System; using System.Windows; using System.ComponentModel; using System.Threading; namespace TestMvvm73892 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } } //view model public class CustomerViewModel : INotifyPropertyChanged { […]

业务逻辑层和数据访问层:循环依赖

我有一点建筑问题。 在我的项目中,我有一个业务逻辑层(BLL),其中包含我的所有业务规则,模型和接口的OO API。 每个对象都有像getById这样的静态方法,它们返回所述对象的实例。 每个对象也有像save和delete这样的方法。 这是非常简单的OO代码。 现在我有一个DataAccess层(DAL),包含在一个单独的命名空间中,对于每个BLL对象,我有一个DataClass或“Repository”,它执行getById和save命令。 所以在某种程度上,BLL save和getById方法是围绕DataClass方法的薄层。 public static NewsItem GetByID(int id) { return DataFactory.GetNewsItemRepository().GetNewsItemById(id); } 为了让DataClasses返回BLL对象,他们需要知道BLL。 所以现在我们有: GUI —> BLL DAL DataFactory只返回实现接口的对象,因此我可以隐藏“OracleNewsItemRepository”之类的实现细节。 但是现在,自从我开始面向对象编程以来一直困扰着我的事情。 在我目前的解决方案中,BLL和DAL都需要相互了解。 这是循环依赖关系,最佳做法是避免循环依赖关系。 另外我只想暴露接口(和我的DataFactory)而不是我的类。 这可以通过将DAL层放在单独的Assembly中来完成。 这是有道理的。 但是,Visual Studio不允许两个程序集相互引用。 另一个问题是: C#内部访问修饰符 不知怎的,我认为我的整个数据访问模式错了。 感觉就像我正在使用DataMappers等其他东西来卷积ActiveRecord模式。 我花了很多时间在Martin Fowler的网站上,但这些模式被描述得非常通用,并用非常抽象的UML图表来说明。 他们没有解决我的问题。 也许我有点肛门,而且没有“完美的数据访问模式”这样的东西。 而我现在所做的并不是非常错误。 但我现在怎么做,好像…… 有任何想法吗?

entity framework多个对象上下文

这个问题已经以50种不同的方式被问到了500个不同的时间……但是这里又一次,因为我似乎无法找到我正在寻找的答案: 我正在使用EF4和POCO代理。 答:我有一个从ObjectContext的一个实例获取的对象图。 该ObjectContext被释放。 B.我有一个从ObjectContext的另一个实例获取的对象。 ObjectContext也被处理掉了。 我想在A中使用B中的实体设置一堆相关的属性….类似于 foreach(var itemFromA in collectionFromA) { itemFromA.RelatedProperty = itemFromB; } 当我这样做时,我得到了例外: System.InvalidOperationException occurred Message=The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects. Source=System.Data.Entity StackTrace: at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedTarget, Boolean applyConstraints, Boolean addRelationshipAsUnchanged, Boolean relationshipAlreadyExists, Boolean allowModifyingOtherEndOfRelationship, Boolean forceForeignKeyChanges) at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedEntity, Boolean […]