任何人都可以推荐任何能够提供编程理论真实世界观的好材料吗?作为一名长期的专业软件工程师,我正在从我的角度讲述一名学生.当我说现实世界时,我的意思是"为什么我应该使用接口?这不符合DRY原则吗?它似乎是额外的不必要的元代码." (这是今天提出的另一个问题的含义.)这个学生班级的教授似乎没有明确的商业理由将它们用作"你使用它,所以你的应用程序的主要部分不依赖在特定实现中,您可以使用一个或多个组件 - 例如,可以更换或升级的数据存储而不会影响应用程序的其余部分,也可以插入外部设备的插件,当更好的应用程序出现时可以替换它们.
我注意到学生倾向于达到他们的CS课程的关键点,并开始在各种问答网站上询问他们为什么应该使用某种范式,他们了解什么和如何,但他们对于为什么这样做是无能为力的实际上很有用并且经历了其余的课程思考"好吧,那又怎么样?" 课程往往非常学术化,没有任何真实的世界背景.自己去过那里,我希望我在学校时有像StackOverflow这样的资源.
我希望这个问题能为学生提供一系列有用的阅读材料,这些材料将有助于为他们在课堂上或其他方面学习的各种编程范例和模式提供真实的世界背景,并帮助他们掌握某些模式的时间和原因应该在现实世界的情况下看待.
好的,我将从.NET反射器剪切和粘贴以演示我正在尝试做的事情:
public override void UpdateUser(MembershipUser user)
{
//A bunch of irrelevant code...
SecUtility.CheckParameter(ref user.UserName, true, true, true, 0x100, "UserName");
//More irrelevant code...
}
Run Code Online (Sandbox Code Playgroud)
这行代码来自.NET Framework中的System.Web.Security.SqlMembershipProvider.UpdateUser(System.Web.dll v2.0.50727).
SecUtility.CheckParameter需要一个引用值作为第一个参数,它们将传入的用户属性作为参数传递给它.
CheckParameter代码的定义是:
internal static void CheckParameter(ref string param, bool checkForNull, bool checkIfEmpty, bool checkForCommas, int maxSize, string paramName)
{
//Code omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
它所做的一切都很有意义 - 在纸面上...所以我在某个地方敲了一个快速的小原型,我想用类似的东西:
public class DummyClass
{
public string ClassName{ get; set; }
}
public class Program
{
private static DoSomething(ref string value)
{
//Do something with the value passed …Run Code Online (Sandbox Code Playgroud) 我收到了一些供应商提供的关于他们正在发布的网络服务的文档,他们非常具体地说,在他们的一个WebMethods上,一个参数有out修饰符(?不确定这是否是正确的描述符),例如考虑以下WebMethod签名:
[WebMethod]
public void HelloWorld(out string strVal)
{
strVal = "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
[显然实际方法不是Hello World方法]
现在,我从未考虑使用out/ref参数设计WebMethod,它让我想知道为什么他们会使用它.
试图理解这个设计决策的应用程序我把一个原型与一些基本的Hello World样式webmethods一起抛出...一个带有单个字符串参数,一个带有两个字符串参数,一个不接收任何参数但返回一个字符串.
在尝试从单独的应用程序引用我的web方法时,我注意到我必须使用单输出字符串参数来访问该方法,就像我已经定义了输出字符串的方法一样,这实际上就客户端而言:
public string HelloWorld1()
{
return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
和
public void HelloWorld2(out string strVal)
{
strVal = "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
是完全相同的...因为我必须同样引用它们[其中x代替正确的方法]:
string val = HelloWorldX();
Run Code Online (Sandbox Code Playgroud)
尝试以我访问它们的方式引用方法,如果它们不是Web方法[如此]:
string val = string.Empty;
MyService1.HelloWorld(out val);
Console.WriteLine(val);
Run Code Online (Sandbox Code Playgroud)
这会导致编译错误,指出没有方法参数接受1输入.这是为什么?显然有一个Web方法接受一个参数 - 我正在看它[HelloWorld2].
检查SOAP响应后,我注意到HelloWorld1响应的内容是:
<HelloWorld1Response xmlns="http://tempuri.org/">
<HelloWorld1Result>string</HelloWorld1Result>
</HelloWorld1Response>
Run Code Online (Sandbox Code Playgroud)
HelloWorld2是
<HelloWorld2Response xmlns="http://tempuri.org/">
<strVal>string</strVal>
</HelloWorld2Response>
Run Code Online (Sandbox Code Playgroud)
更进一步,我想,如果我有2个参考论点怎么办...
public void HelloWorld3(out string strVal1, out string strVal2)
{
strVal1 = "Hello World";
strVal2 …Run Code Online (Sandbox Code Playgroud) 我在最后一段时间里一直在玩SVN并且已经开始喜欢它的功能和用户体验,我们可以将它与我们的bug跟踪系统联系起来,以简化每个人的生活.所以我们决定将我们的VSS 2005设置迁移到SVN,现在我正在解决这个问题.
似乎有许多工具声称能够完成从VSS 2005到SVN的迁移,但我无法弄清楚哪个是最好的或哪个将为我提供最完整的过渡.我需要一个可以迁移完整历史记录而不仅仅是从VSS签出并检入SVN.
我发现Polarion SVN Importer看起来既强大又高度可配置,但是,我无法让这该死的东西工作,它抱怨它无法从VSS中的$ /中拉出文件列表.如果我运行相同的命令它手动绊倒,一切似乎运行正常,所以我无法弄明白.
有没有人成功地将他们的源码从VSS 2005迁移到SVN,如果有的话,你使用了什么工具,你的发现是什么?任何警告或陷阱都是最有用的,所以知道任何有用/令人惊讶的事情,或者是令人失望或只是明显歪曲.
是否有人对不同目标受众的用户接受以下投票系统进行过任何研究?

要么

我不感兴趣哪个更准确或投票将如何用于排名.我感兴趣的是从用户的角度来看,这更直观 - 基于该用户的人口统计.
显然,作为开发人员,我们都了解StackOverflow风格的投票系统,但我很好奇这是否因为我们[作为开发人员]思考的方式才有意义.亚马逊风格的明星系统对于针对更基本用户的网站上的选民更有意义吗?
有没有人对此进行任何研究,如果有的话结果是什么?有没有人有研究结果的链接?
问题是什么......
jQuery是否有任何方法允许您以与DOM相似的方式查询多维对象数组.
例如,给我一个包含在具有一些匹配属性值的多维数组中的对象列表 - 例如,其中StartOfPeriod大于指定日期或其中name =="Ben Alabaster"
如果已经存在某些东西,我想避免重新发明轮子.
我经常对我必须包含在我的代码中的日志记录数量感到沮丧,这让我想知道是否有更好的做事方式.
我不知道这是否已经完成或是否有人提出了更好的想法,但我想知道是否有人知道将"记录器""注入"应用程序,以便被动地监视线程并安静地记录日志流程发生时不必执行以下操作:
public void MyProcess(int a, string b, object c)
{
log(
String.Format(
"Entering process MyProcess with arguments: [a] = [{0}]; [b] = [{1}]; [c] = [{2}]",
a.ToString(),
b,
c.ToString()
);
try
{
int d = DoStuff(a)
log(
String.Format(
"DoStuff({0}) returned value {1}",
a.ToString(),
d.ToString()
)
);
}
catch (Exception ex)
{
log(
String.Format("An exception occurred during process DoStuff({0})\nException:\n{1}",
a.ToString(),
ex.ToString())
)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我可以对我的记录器说:
Monitor(MyClass.MyMethod)
Run Code Online (Sandbox Code Playgroud)
然后它将监视该方法内部的所有内容,包括传入参数以及方法调用和传递给这些方法的值,发生的异常等.
过去有没有人实现这样的东西?甚至可以实施吗?以这种方式登录只是一个梦想?
我喜欢设计能做到这一点的东西,但我甚至不知道我会从哪里开始.当然,我也不想重新发明轮子,如果它已经完成了,如果有人能指出我正确的方向,那就太好了.
任何建议都会感激不尽......
编辑:我想我会回答一个问题,询问日志中所需的详细程度.通常需要提供可配置级别的日志记录,以便如果配置指定详细日志记录,则记录所有内容,而如果配置了关键日志记录,则仅记录某些信息以及异常.如果配置了致命日志记录,则仅记录导致应用程序死亡的信息.这样的东西是可配置的还是AOP需要3或4个不同的构建,具体取决于日志记录级别的数量?
我经常使用4个级别:致命,严重,信息,详细
几天前,我读了一个问题,询问有多少开发人员手工编写HTML/XHTML代码,而不是依赖于WYSIWYG工具 - /sf/ask/28423671/ -使用所见即所得的编辑器,或手代码,其
我倾向于设计ASP.NET服务器控件,而不是用于我的代码中的用户控件.我这样做,以便我可以通过拖放到WYSIWYG重用它们,只需设置几个相关的属性.在设计组件时,这会花费额外的时间,但在我在大型应用程序中使用它们时会大大简化.
在阅读了大多数开发人员似乎手工编写代码而不是使用WYSIWYG之后,它让我想知道:我是否浪费时间以这种方式开发组件?
编辑:澄清 - 大多数情况下,最初的意图是这些控件是我自己使用的.但是,有很多场合它可能对我的团队其他成员有用,或者可能对公众有用.然而,像大多数事情一样,我倾向于看到相对较少的额外工作提供的巨大潜在额外价值,无论实现额外价值的可能性如何.
有没有人或有任何人遇到.net app.config的深入指南?我在寻找这个.net领域的权威指南时遇到了重大问题.
我已经可以处理自定义配置部分,从基本的键/值对设置到完整的自定义配置处理程序,我努力寻找信息,但我找不到任何关于配置文件的基本本机.NET功能的文档... for例如,关于BCL配置.
我已经浏览了machine.config.comments和config.xsd文件,它提供了一些洞察力,但还不足以完全掌握配置文件的全部潜力.我还浏览了我在Safari上可以找到的所有东西,并且只设法提出了一些我以前没有意识到的有用的花絮,但似乎.NET的这个领域记录非常糟糕,除非你有一个非常考虑到特定的目的,试图找到它的信息是没用的.
如果有人能够指出我一些深入的,关于此的确切信息,我将非常感激.
我有一个我刚刚在数据库中找到的查询失败导致报告失败的问题.查询的基本要点:
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange
Run Code Online (Sandbox Code Playgroud)
现在,myField不包含所有行中的数值数据[它是nvarchar类型] ...但是这个查询显然是这样设计的,它只关心这个字段中的数据是数字的行.
这个问题是T-SQL(我理解的附近)不会使Where子句短路,从而导致它在数据不是数字的记录上抛弃,但异常:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '/A' to data type int.
如果没有将myField为numeric的所有行转储到临时表中,然后查询该字段在指定范围内的行,那么我能做到的最佳方法是什么?
我的第一个解析纯粹是为了尝试分析返回的数据,看看发生了什么:
Select *
From (
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange
Run Code Online (Sandbox Code Playgroud)
但是我得到了我为第一个查询所做的相同错误,我不确定我理解,因为我现在没有转换任何不应该是数字的数据.子查询应该只返回myField包含数字数据的行.
也许我需要早茶,但这对任何人都有意义吗?另一组眼睛会有所帮助.
提前致谢