Microsoft Linq to SQL、Entity Framework(EF)、nHibernate等都提出将ORMS作为下一代Data Mapping技术,并号称轻量、快速、简单。例如这篇刚刚发表在 VS 杂志上的文章:
http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583
谁对在他们的项目中实现这些技术感到兴奋?这些技术的创新之处在哪里,使它们比前代产品更出色?
最佳答案
多年来,我在数百个应用程序中编写过数据访问层、持久化组件,甚至我自己的 ORM(我的“爱好”之一);我什至实现了自己的业务事务管理器(在 SO 的其他地方讨论过)。
ORM 工具在其他平台上已经存在了很长时间,例如 Java、Python 等。现在以 Microsoft 为中心的团队已经发现了它们,这似乎是一种新的时尚。总的来说,我认为这是一件好事——探索和理解似乎随着 .NET 的到来而引入的体系结构和设计概念的旅程中的必要步骤。
底线:我总是更愿意自己进行数据访问,而不是与一些试图“帮助”我的工具作斗争。放弃对自己命运的控制是永远不能接受的,数据访问是我应用程序命运的关键部分。一些简单的原则使数据访问非常易于管理。
使用模块化、抽象和封装的基本概念——因此将平台的基本数据访问 API(例如 ADO.NET)与您自己的层包装在一起,从而提高抽象级别,使其更接近您的问题空间。不要直接针对该 API 对所有数据访问进行编码(也在其他地方讨论过)。
严格应用 DRY(不要重复自己)原则 = 从数据访问代码中重构日光。在适当的时候使用代码生成作为重构的一种手段,但只要有可能就尽量消除代码生成的需要。通常,代码生成会揭示您的环境中缺少某些东西——语言缺陷、内置工具限制等。
与此同时,学习如何很好地使用可用的 API,尤其是在性能和稳健性方面,然后将这些经验教训整合到您自己的抽象数据访问层中。例如,学习在 SQL 中正确使用参数,而不是将文字值嵌入到 SQL 字符串中。
最后,请记住,任何成功的应用程序/系统都会遇到性能问题。解决性能问题更多地依赖于将它们设计出来,而不仅仅是在实现中“调整”某些东西。该设计工作将影响数据库和应用程序,它们必须同步更改。因此,寻求能够轻松(敏捷)进行此类更改,而不是试图避免更改应用程序本身。在某种程度上,这最终意味着能够在不停机的情况下部署更改。如果您不“设计”远离它,这并不难做到。
关于c# - 这里的每个人都在跳上 ORM 潮流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363222/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c
据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b
如何使用geminstall同时安装多个gem,同时指定我想要的版本?例子:geminstallakami-v1.2.0--ignore-dependenciesgeminstallatomic-v1.1.14--ignore-dependenciesgeminstallaws-s3-v0.6.2--ignore-dependenciesgeminstallbackports-v3.3.0--ignore-dependenciesgeminstallbrendanlim-sms-fu-v1.0.0--ignore-dependenciesgeminstallbuilder-v3.1.3
我正在通过位于http://ruby.railstutorial.org的教程在Rails上试用ruby.我已经到了可以创建用户并将他们的姓名和头像显示在以下位置的地步:http://localhost:3000/users/1现在我想在用户访问时显示所有用户:http://localhost:3000/users/这是我的Controller:classUsersController这是我的看法。#Viewforindexactioninuser'scontroleerAllusers我收到以下错误。undefinedmethod`each'fornil:NilClass谁能告诉我为
破败。一个人可以有很多出价,这个人只有一个出价。在我的索引操作中,我有@bids=Bid.find_by_person_id(params[:person_id])在我看来是的我得到NoMethodError:undefinedmethodeach'for#在访问人员出价的索引View时。这是因为这个人只有一个出价吗?我觉得不是这样,但除此之外我很茫然.. 最佳答案 find_by返回第一项。我想你在找Bid.where(person_id:params[:person_id]) 关于r
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
已检查ActiveRecord、DataMapper、Sequel:有些使用全局变量(静态变量)有些需要在使用模型加载源文件之前打开数据库连接。在使用不同数据库的sinatra应用程序中使用哪种ORM更好。 最佳答案 DataMapper专为多数据库使用而设计。你可以通过像DataMapper.setup(:repository_one,"mysql://localhost/my_db_name")这样的方式设置多个存储库。DataMapper随后会跟踪所有已在哈希中设置的存储库,您可以引用该哈希并将其用于范围界定:DataMapp