小编Qui*_*ome的帖子

有没有充分的理由不使用ORM?

在我的学徒期间,我已经将NHibernate用于一些较小的项目,我自己编写和设计.现在,在开始一个更大的项目之前,讨论产生了如何设计数据访问以及是否使用ORM层.由于我仍处于学徒阶段,并且仍然认为自己是企业编程的初学者,我并没有真正尝试推动我的观点,即使用对象关系映射器到数据库可以大大简化开发.开发团队中的其他程序员比我经验丰富,所以我想我会按照他们的说法去做.:-)

但是,我不完全理解不使用NHibernate或类似项目的两个主要原因:

  1. 可以使用SQL查询构建自己的数据访问对象,并将这些查询复制出Microsoft SQL Server Management Studio.
  2. 调试ORM可能很难.

所以,当然我可以用很多SELECTs等构建我的数据访问层,但是在这里我会错过自动连接,延迟加载代理类的优势以及如果表获得新列或列获得更低的维护工作量重命名.(更新众多SELECT,INSERT并且UPDATE查询与更新映射配置,并可能重构业务类和DTO的.)

此外,如果您不熟悉框架,使用NHibernate可能会遇到无法预料的问题.例如,这可能是信任Table.hbm.xml,您可以在其中设置字符串的长度以自动验证.但是,我也可以想象一下基于"简单"SqlConnection查询的数据访问层中的类似错误.

最后,上面提到的那些论点真的是不利用ORM用于基于数据库的非平凡企业应用程序的理由吗?他/我可能错过了其他可能的争论吗?

(我应该补充一点,我认为这就像第一个基于.NET/C#的"大型"应用程序需要团队合作.在Stack Overflow上被认为非常正常的良好实践,例如单元测试或持续集成,都是非 - 到现在为止.)

c# nhibernate orm enterprise

102
推荐指数
13
解决办法
3万
查看次数

什么是更快,打开字符串或elseif类型?

假设我可以选择在字符串比较的基础上识别代码路径,或者如果确定类型:

哪个更快,为什么?

switch(childNode.Name)
{
    case "Bob":
      break;
    case "Jill":
      break;
    case "Marko":
      break;
}

if(childNode is Bob)
{
}
elseif(childNode is Jill)
{
}
else if(childNode is Marko)
{
}
Run Code Online (Sandbox Code Playgroud)

更新:我问这个问题的主要原因是因为switch语句对于什么算是一个特例.例如,它不允许您使用变量,只允许移动到主程序集的常量.我认为它有这个限制,因为它正在做一些时髦的东西.如果它只是翻译成elseifs(作为一张海报评论)那么为什么我们不允许在case语句中使用变量?

警告:我是后期优化的.这种方法被称为许多在应用程序的缓慢一部分倍.

c# performance

75
推荐指数
5
解决办法
5万
查看次数

为什么可空的bool不允许if(可为空)但允许if(nullable == true)?

此代码编译:

private static void Main(string[] args)
{
    bool? fred = true;

    if (fred == true)
        Console.WriteLine("fred is true");
    else if (fred == false)
         Console.WriteLine("fred is false");
    else Console.WriteLine("fred is null");
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译.

private static void Main(string[] args)
{
    bool? fred = true;

    if (fred)
        Console.WriteLine("fred is true");
    else if (!fred)
         Console.WriteLine("fred is false");
    else Console.WriteLine("fred is null");
}
Run Code Online (Sandbox Code Playgroud)

我想如果(booleanExpression == true)应该是冗余.在这种情况下为什么不呢?

.net c# nullable

36
推荐指数
2
解决办法
6001
查看次数

Windows CE与嵌入式Linux

现在我确信我们都很清楚Linux与Windows桌面的相对优点.但是,我对嵌入式开发世界的了解却少得多.我主要对行业解决方案感兴趣,因此对iPhone或Android不感兴趣,对这两个操作系统更感兴趣.

嵌入式世界中两个平台之间的相对权衡是什么?如果您正在考虑使用自定义硬件,部分自定义操作系统和自定义应用程序为特定项目构建一个框,那么您会选择哪个以及为什么?

我认为Windows CE赢得了工具,Linux在成本和性能方面都获胜.然而,这只是一种猜测.有没有人有这两者的任何事实或经验?

linux embedded operating-system windows-ce

32
推荐指数
7
解决办法
3万
查看次数

调用值类型的方法会导致在.NET中装箱吗?

我只是参与Stack Overflow问题.NET中的所有内容都是对象吗?.

并且一张海报(在接受的答案的评论中)似乎认为对值类型执行方法调用导致拳击.他向我指出了Boxing和Unboxing(C#编程指南),它没有明确指出我们描述的用例.

我不是一个信任单一来源的人,所以我只是希望得到关于这个问题的进一步反馈.我的直觉是没有拳击,但我的直觉确实很糟糕.:d

进一步阐述:

我使用的例子是:

int x = 5;
string s = x.ToString(); // Boxing??
Run Code Online (Sandbox Code Playgroud)

如果有问题的结构覆盖从对象继承的方法,则不会发生拳击,如此处所接受的答案所述.

但是,如果结构不覆盖该方法,则在callvirt之前执行"约束" CIL命令.根据文档,OpCodes.Constrained Field,这导致拳击:

如果thisType是一个值类型而thisType没有实现方法,则ptr被解除引用,装箱,并作为'this'指针传递给callvirt方法指令.

.net boxing value-type

24
推荐指数
3
解决办法
2584
查看次数

本地化和DataAnnotations.GlobalResourceProxyGenerator和PublicResxFileCodeGenerator

为什么DataAnnotation属性难以访问PublicResxFileCodeGenerator创建的资源?

我发现以下属性:

[Compare("NewPassword", ErrorMessageResourceName = "RegisterModel_ConfirmPasswordError", ErrorMessageResourceType = typeof(Resources.Global))]
Run Code Online (Sandbox Code Playgroud)

如果已使用PublicResxFileCodeGenerator创建资源,将无法找到该资源.但是,使用GlobalResourceProxyGenerator创建的相同资源将正常工作.两个资源文件都设置为Content,并存放在App_GlobalResources中.我已经尝试将默认语言放在App_LocalResources中,但它似乎没有任何区别.我的测试是我的第二语言(GlobalResourceProxyGenerator)工作,但我的主要语言(PublicResxFileCodeGenerator)抛出异常(它无法找到资源文件).如果我切换到GlobalResourceProxyGenerator然后一切都很好(但显然没有公共访问).

有人知道为什么吗?我想将来将资源转移到另一个程序集中.

c# asp.net-mvc localization

23
推荐指数
1
解决办法
8083
查看次数

您是否知道Compact和Full Framework代码之间的任何运行时差异?

这两个版本的.NET之间的兼容代码存在许多运行时差异.

这是目前为止的差异列表:

  • Graphics.DrawRectangle - 相差1个像素
  • Graphics.DrawString - 如果与StringFormat一起使用并且StringAlignments都设置为Center,则丢失换行符.
  • 大多数文件操作 - 紧凑框架需要一个完整的路径
  • BeginAccept之后的套接字状态
  • (至少在WinCE 5中)你不能使用套接字与超时同步发送数据(没有问题,但你冒险挂起)
  • 位图(真正的所有图像派生类)在清理资源方面表现不同. - ctacke
  • CF中标签和树视图的默认字体更大 - 达尔文
  • 当CF中的标签被禁用时,它只是变灰了(完整的.net framewark用另一种颜色勾勒出文字) - Darwyn
  • 程序集路径以不同的格式从System.Reflection.Assembly.GetExecutingAssembly()返回.GetName().CodeBase - Qwertie

我们还有更多需要添加吗?

.net compact-framework

15
推荐指数
1
解决办法
1300
查看次数

什么是最好的Android手机作为开发人员

我知道你可以买一个开发者手机,但新的G2看起来不错,三星即将到来.但我认为,如果它们是您希望生产的应用程序的目标市场,那么使用消费者手机会更好一点,特别是出于测试目的.

有没有其他人有这种选择的经验,并为这个问题提供进一步的照明?

android

13
推荐指数
2
解决办法
5144
查看次数

自动化测试框架 - Windows CE

寻找一种方法来驱动在CE设备上运行的Compact Framework应用程序.我们基本上需要的是能够编写按下按钮并点击内容的小脚本.任何人都知道这样的工具,或者最好只是自己攻击一个?

testing automation windows-ce

8
推荐指数
1
解决办法
5283
查看次数

没有软件,硬件是否无法调试?

免责声明:我(大多数)硬件无知.这可能是我的问题.但是我发现很难接受调试硬件是不可能的,所以我只想得到一些第二意见.

我们有一个问题.某些操作(在运行时交换Usb设备)可能会破坏Usb板上的Usb集线器或芯片(它是自定义硬件).这是一个模糊的问题(它看起来的"blownness"的程度可能会略有不同),问题表现在与各种症状间歇时装非常难以准确地再现(数据包通常随机损坏).

这导致难以确定新报告的问题是由于该硬件故障还是实际上是软件中的错误.我们已经在这些设备上实施了保护,但如果未受保护的设备与受保护的设备一起使用,则可能会污染(现在受保护的)设备.其中一个端口也没有受到保护,这意味着有人仍然可以" 意外地"使用错误的端口"杀掉"一个应该安全的设备.

这样做的结果是,如果不完全替换所有硬件,我们无法分辨出哪个设备会遇到这个问题(我们已经为大多数生产硬件咬了一口气但是仍然有很多开发和QA硬件在那里这个问题).

我想可能有一种硬件可以使用某种硬件诊断工具确定套件是否有故障.我生活在一个梦幻世界吗?我的硬件部门告诉我,唯一可以证明错误的测试是软件测试......但正如我所说,症状很难再现.由于我不熟悉硬件,我不知道这是否是唯一的答案.因此,我问世界.

hardware testing diagnostics

7
推荐指数
1
解决办法
315
查看次数