我正在寻找一个Scheme或甚至LISP的版本,我可以用它来恢复一些失去的Lisp开发技巧.一些Web功能会很好,但不是必需的.
我看过Plt和MIT方案,虽然两者看起来都不错,但Plt看起来更加丰富.我也看了Lisp实现,但所有看起来都很昂贵.
我赞成免费/廉价的实现,因为这可能只是偶尔的业余爱好编程.你有什么建议?
我希望社区对我对Linq to Sql和其他ORM映射器的一些看法有所了解.
我喜欢Linq to Sql以及在本机开发语言中表达数据访问逻辑(或一般CRUD操作)的想法,而不是必须处理C#和SQL之间的"阻抗不匹配".例如,要返回与业务层的EventDataSource兼容的Event实例列表,我们使用:
return db.Events.Select(c => new EventData() { EventID = c.EventID, Title = c.Title })
Run Code Online (Sandbox Code Playgroud)
如果我使用旧的SQL-to-C#构造实现它,我必须创建一个Command类,添加EventID参数(使用字符串来描述"@EventID"参数),将SQL查询字符串添加到命令类,执行命令,然后使用(cast-type)nwReader ["FieldName"]拉取每个返回的字段值,并将其分配给我创建的EventData类实例的成员(yuck).
所以,这就是人们喜欢Linq/SubSonic /等的原因.并且我同意.
然而,从更大的角度来看,我看到了一些错误的东西.我的感觉是,微软也看到了一些错误,这就是为什么他们将Linq杀死为SQL并试图将人们转移到Linq to Entities.只是,我认为微软正在加倍打赌.
那么,有什么不对?
问题是有架构的宇航员,特别是在微软,他们看着Linq到Sql,并意识到它不是一个真正的数据管理工具:在C#中还有许多你不能轻易做到的事情,他们的目标是修复它. 你看到这体现在Linq to Entities背后的野心,关于Linq 的革命本质的博客文章甚至是LinqPad的挑战.
而这个问题是在于,它假定SQL的问题.也就是说,为了减轻轻微的不适(SQL和C#之间的阻抗不匹配),当创可贴(Linq to SQL或类似的东西)做得很好时,微软提出了相当于太空服(完全隔离).
据我所知,开发人员非常聪明,可以掌握关系模型,然后在开发工作中智能地应用它.事实上,我会更进一步说Linq to SQL,SubSonic等已经过于复杂:学习曲线与掌握SQL本身并没有太大的不同.因为,在可预见的未来,开发人员必须掌握SQL和关系模型,我们现在面临学习两种查询/ CRUD语言的问题.更糟糕的是,Linq通常很难测试(你没有查询窗口),从我们正在做的实际工作中删除了一层(它生成了SQL),并且对于像SQL结构这样的SQL结构具有非常笨拙的支持(最好)日期处理(例如DateDiff),"拥有"甚至"分组依据".
有什么选择?就个人而言,我不需要像Linq to Entities那样的数据访问的不同模型.我更喜欢在Visual Studio中弹出一个窗口,输入并验证我的SQL,然后按一个按钮生成或补充一个C#类来封装调用.既然你已经知道了SQL,你不想只输入这样的东西:
Select EventID, Title From Events Where Location=@Location
Run Code Online (Sandbox Code Playgroud)
并最终得到一个EventData类,A)包含EventID和Title字段作为属性,B)有一个工厂方法,它将一个'Location'字符串作为参数,并生成一个List <EventData>?你必须仔细考虑对象模型(上面的例子显然没有解决这个问题),但仍然使用SQL同时消除阻抗不匹配的基本方法对我很有吸引力.
问题是:我错了吗?Microsoft是否应该重写SQL基础结构,以便您不必再学习SQL /关系数据管理? 他们可以用这种方式重写SQL基础结构吗?或者你认为在SQL之上的一个非常薄的层来消除设置参数和访问数据字段的痛苦是足够的吗?
更新我想推广到顶部的两个链接,因为我认为它们捕获了我所追求的重要方面.首先,CodeMonkey指出了一篇题为"计算机科学的越南" …
我想将用户放在SQL Server脚本中,但我需要首先测试存在,否则我会收到脚本错误.当删除表或存储过程时,我检查sysobjects表,如下所示:
IF EXISTS (
SELECT *
FROM sysobjects
WHERE id = object_id(N'[dbo].[up_SetMedOptions]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1
)
Drop Procedure up_SetMedOptions;
GO
Run Code Online (Sandbox Code Playgroud)
检查用户的必然结果是什么?请注意,我不是要求数据库登录到服务器!该问题与特定数据库中的用户有关.
我必须仅使用符合某些条件的记录从表中提取整数ID列表.例如:
Select ProdID From Products Where (ProdType='XYZ');
Run Code Online (Sandbox Code Playgroud)
问题是我必须将它作为一组逗号分隔值返回,以便我可以使用它来选择多选列表中的项目:
111,231,554,112
Run Code Online (Sandbox Code Playgroud)
而不是记录.我不想在我的C#代码中执行此操作 - 我希望通过这种方式通过查询直接从数据库中获取.有任何想法吗?
我一直在疯狂地创建单元测试,发现我经常需要在一次测试中设置一些我刚刚在之前的测试中被删除的测试.在一次测试中创建一些东西(例如数据库记录)是否合理(例如插入测试)然后用它来进行后续测试(例如删除测试)?或者每个测试是否应该完全独立?
您甚至可以确定NUnit中的测试顺序还是按字母顺序完成?
注意:我特别询问一个测试文件中的测试顺序. 不跨测试文件或以任何方式更全局.
更新:感谢所有回答的人 - 有很多很好的答案,团队的感觉非常一致.我选择了John Nolan的答案,因为他提供了最全面的解释和很多链接.正如你可能已经猜到的那样,尽管我认为像约翰所说的那样可能有点"臭",但我一直非常想要打破这个规则.还要感谢Fortyrunner添加单元测试标签.
我刚刚开始使用Ruby/Rails,我想知道Rails开发人员在Rails站点上使用什么来提供报告和/或图表.在ASP.NET中我使用DevExpress的工具,但我对Rails生态系统知之甚少知之甚少.任何见解将不胜感激.
我刚读完这篇关于异常的优点和缺点的文章,我同意Try-Catch块不应该用于"正常"控制流管理的情绪(不要像goto一样使用它们).然而,一位作者提出了关于可维护性(尤其是性能)的好点,这让我对Try-Finally块中的相同内容感到好奇.
我在我的ASP.NET应用程序中使用Try 包围每个 Connection open事件,以便我可以确保在Finally中关闭Connection.在Web应用程序中泄漏连接显然不是一件好事,我怀疑我是否会改变这种做法,但您有什么想法?
注意:我确实有连接包装在DAL中,并且可以在调用对象析构函数时关闭连接,但这对我来说似乎很粗略.据我所知,你不能指望在异常情况下调用析构函数.我错了吗?
我创建了一个函数,它接受一个SQL命令并生成输出,然后可以用它来填充类实例的List.代码效果很好.我在这里提供了一个稍微简化的版本,没有异常处理仅供参考 - 如果您想直接解决问题,请跳过此代码.如果你在这里有建议,我会全力以赴.
public List<T> ReturnList<T>() where T : new()
{
List<T> fdList = new List<T>();
myCommand.CommandText = QueryString;
SqlDataReader nwReader = myCommand.ExecuteReader();
Type objectType = typeof (T);
FieldInfo[] typeFields = objectType.GetFields();
while (nwReader.Read())
{
T obj = new T();
foreach (FieldInfo info in typeFields)
{
for (int i = 0; i < nwReader.FieldCount; i++)
{
if (info.Name == nwReader.GetName(i))
{
info.SetValue(obj, nwReader[i]);
break;
}
}
}
fdList.Add(obj);
}
nwReader.Close();
return fdList;
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这很好用.但是,出于显而易见的原因,我希望能够使用匿名类调用类似的函数.
问题1:似乎我必须在调用此函数的匿名版本时构造一个匿名类实例 - 这是对的吗?一个示例电话是: …
我在一个ASP.NET应用程序中尝试使用Linq to SQL,该应用程序使用带有大量外键(100多个表)的大型数据库.令我印象深刻的是Linq如何允许您创建一个包含所有关系的datacontext,然后创建自动连接表的Linq语句.但是,这会产生一个问题:如果我提交的Linq语句只适用于一个或两个表,那么拥有一个只有必要表/表的datacontext会更好吗?在我看来,如果我使用数据库中的所有表构建一个datacontext,它将非常庞大,并且每次使用Linq加载它都会对性能产生负面影响.我对吗?
评论:我知道只在需要的时候创建datacontext(但是,尽管如此,还是要提及它).问题在于我是否应该拥有大量的小数据文件,或者是否可以构建一个大数据文件.
我正在尝试编写包含多首歌曲的应用程序.通过各种教程,他们只是说"将你的文件添加到项目"或其他一些,所以我尝试将我的MP3添加到各个地方(包括xcassets)但它永远不会复制到我的项目的输出或播放.
换句话说,这总是返回nil:
let path = NSBundle.mainBundle().pathForResource(audioFile, ofType: "mp3")
Run Code Online (Sandbox Code Playgroud)
这似乎是死的简单的东西,它让我发疯,它不会简单地播放文件.我在根目录中尝试过它,我创建了一个名为"resources"的目录(因为有几个消息来源称"将它添加到资源"),甚至在xcassets中也是如此.但是,它总是回来零.
请注意,我在Xcode 7(测试版)中为最新的iOS开发并使用Swift 2.该文件大小约为53MB.
很感谢任何形式的帮助!