我正在devise一个使用Jeffrey Palermo描述的洋葱架构的ASP.NET MVC应用程序。 这是一个ASP.NET MVC 2.0项目,我要求所有视图都使用专用视图模型进行强types化 – 我们不会将域模型传递给我们的视图。 我们使用AutoMapper进行翻译 – AutoMapper被隔离在基础架构中,Web不知道或在意使用AutoMapper。 目前,我正在Web项目中定义IViewModelMapping接口 – 仅仅因为这个服务将被控制器使用,并且可以直接访问它自己的视图模型。 这样接口就可以访问域模型(核心)和视图模型(networking)。 为了提供IViewModelMapping接口的实际实现,我在基础结构项目中创build了一个ObjectMapping命名空间,将实际的映射实现隔离到洋葱的基础设施。 在这样做的时候,这将需要基础架构依赖于核心和networking。 我的问题是:因为这两个项目在技术上都位于洋葱的郊区(在同一层) – 一个项目是否允许依赖于该层中的另一个项目? 有没有人注意到这个devise的任何潜在的陷阱? 另一种devise是将IViewMapper接口移动到Core中,但这是不可能的,因为Core无法访问ViewModel类。 我也可以将视图模型移动到Core中,但是我觉得他们不属于那里,因为它们是特定于UI层的。 所提出的体系结构如下所示 – 注意到,基础架构依赖于Core和Web。 Web仍然是孤立的,只能访问Core业务逻辑。 http://www.matthidinger.comhttp://img.dovov.comonion-arch.png
阅读亚马逊和ACCU的评论表明,John Lakos的书“ 大规模C ++软件devise”可能是模块化的Rosetta Stone。 与此同时,这本书似乎是非常罕见的:没有多less人读过它,没有海盗电子副本在四处stream动。 所以你怎么看? [由于这是谷歌search书名第三,留下我的投票重新开放,这将是一个可惜的是,在这里放弃所有有用的讨论(我一直认为这是适合它的地方)。]
我一直在玩EF,看看它能处理什么。 还有很多文章和文章解释了EF可以使用的各种场景,但是如果错过了“con”方面的话。 现在我的问题是, 在什么样的情况下,我应该远离entity framework ? 如果你在这个领域有一些经验,告诉我哪些情景不适合EF。 告诉我你遇到的一些不利因素,你希望你select了不同的技术。
我在C#项目中使用Visual Studio 2012.当Visual Studio尝试格式化我的代码时,它是断行,并使我的代码看起来难以阅读。 原始代码(从我和我的团队中读取的内容很酷): if (list.Any(x => x.Type == (int) EnumType.Customer)) { } 而当Visual Studio尝试格式化: if ( list.Any( x => x.Type == (int) EnumType.Customer)) { // other break codes } 有很多其他的部分,它是打破我的代码。 我喜欢自动格式化一些部分,但我的问题是,如果有什么办法来禁用自动格式化Visual Studio的这个断线? PS:我也有安装resharper。
我目前正在为Web应用程序的公共Web API创build一个身份validation系统。 鉴于每个用户帐户都有一个API密钥,并且每个请求都必须经过validation,所以我有两个select: 使用HTTP基本authentication, 就像GitHub一样 。 请求必须发送到URL http://api.example.com/resource/id with basic authentication username: token password: the api key 传递API令牌作为查询string参数。 请求必须发送到URL http://api.example.com/resource/id?token=api_key 还有第三个选项是在URI中传递令牌,但我真的不喜欢这个解决scheme。 你会采用哪种解决scheme,为什么?
向我的ASP.NET MVC项目添加Web服务是否打破了MVC的整个概念? 该Web服务(WCF)依赖于我的MVC项目中的模型层与后端进行通信(所以它看起来像它需要成为MVC解决scheme的一部分)。 我应该添加到控制器或模型层?
我以前在这里看过这个问题,但是我并不满意,我理解完整的后果。 问题是什么返回types应该使用linq-to-sql的数据层返回最大的灵活性和查询能力。 这是我读过/发现的: IEnumerable是有限的,只允许读取前进操作。 IEnumerable是最通用的。 我发现IEnumerable确实允许查询操作与扩展语法。 列表允许最大的灵活性,因为插入操作。 应该使用集合而不是列表来启用只读集合。 不应该使用IQueryable,应该“使用和closures”。 IQueryable不会返回一个列表,但会为数据库生成一个查询语法。 我觉得我有一个更好的感觉权衡,但仍然不确定几件事情: 为什么我会select具体types的接口变体? 即IList或ICollection vs列表或集合。 我会得到什么好处? 我看到扩展操作的工作,但扩展查询语法的工作呢? 有人build议我以前使用AsQueryable()。 但是,如果我没有连接到数据库,为什么要这样做呢? 看来扩展方法无论如何工作。
我使用ASP.NET MVC 3和entity framework4.1代码优先。 比方说,我有一个User实体: public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } } 在我的UserController编辑时,我想添加一个PasswordConfirmation字段并validationPasswordConfirmation == Password 1.通过构图 我的第一个尝试是: public class EditUserModel { [Required] public User User { get; set; } […]
我有销售人员和豆制品柜台谁试图出售定制给客户,这很好。 但是当一个复杂的变更请求发回给我一个大的估计时,他们会感到困惑。 他们经常回到我身边:“为什么你不能再添加一列?” 而另一个则是PER客户端的十几个自定义列。 到目前为止,我所能回来的是“我们试图保持数据库正常化”,这对他们来说毫无意义。 我告诉他们,我可以创build一个允许每个客户定义他们自己的一套自定义字段的表格系统,但是当然比“只添加几列”要花费更多的时间和金钱。 当然,他们也想吃蛋糕,也吃。 那我怎么能让他们明白?
Unit of Work和Repository Pattern是当今相当普遍的用法。 正如马丁·福勒( Martin Fowler) 所言 ,使用物UoW的目的是形成一个商业交易,同时UoW知道存储库实际上是如何工作的(持续的无知)。 我已经回顾了许多实现; 并忽略具体的细节(具体/抽象类,接口……),它们或多或less类似于下面的内容: public class RepositoryBase<T> { private UoW _uow; public RepositoryBase(UoW uow) // injecting UoW instance via constructor { _uow = uow; } public void Add(T entity) { // Add logic here } // +other CRUD methods } public class UoW { // Holding one repository […]