小编Bri*_*lis的帖子

将DTO映射到域对象的最佳实践?

我已经看到很多关于将DTO映射到Domain Objects的问题,但我觉得他们没有回答我的问题.我之前使用过很多方法并有自己的看法,但我正在寻找一些更具体的东西.

情况:

我们有很多域对象.我们使用CSLA模型,因此我们的域对象可能非常复杂,并且包含自己的数据访问.你不想在线上传递这些.我们将编写一些新服务,以多种格式(.Net,JSON等)返回数据.出于这个(以及其他原因),我们还创建了一个精简的数据传输对象,以便在线路上传递.

我的问题是如何连接DTO和Domain对象?

我的第一反应是使用Fowler,DTO模式类型的解决方案.我已经多次看过这件事了,对我来说感觉很对.域对象不包含对DTO的引用.调用外部实体("映射器"或"汇编器")以从域对象创建DTO.通常在域对象端有一个ORM.这样做的缺点是"映射器"在任何真实情况下都会变得非常复杂,并且可能非常脆弱.

提出的另一个想法是域对象"包含"DTO,因为它只是一个精益数据对象.域对象属性将在内部引用DTO属性,如果需要,可以返回DTO.我可以看到没有问题,但感觉不对.我看过一些使用NHibernate的人似乎使用这种方法的文章.

还有其他方法吗?以上是值得使用的方式之一吗?如果是,如果没有,为什么?

感谢您提前了解任何信息.

.net asp.net design-patterns dto

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

MSBuild使用不正确版本的sgen.exe生成XmlSerializer dll?

我正在使用TeamCity运行MSBuild脚本,该脚本将清理并重建我们的解决方案之一。当我部署由该过程生成的dll时,Web服务器返回有关[MyType] .XmlSerializer.dll的错误,该错误是“此程序集由比当前加载的运行时新的运行时构建,无法加载。” 到目前为止,这是我的笔记:

  • 该解决方案是针对.Net Framework 3.5的Visual Studio 2010解决方案。
  • TeamCity将模仿这一点。它使用MSBuild版本-“ .Net Framework 4.0”和MSBuild ToolsVersion-“ 3.5”进行设置。这告诉TeamCity使用MSBuild 4.0,但要以3.5 Framework为目标。由于我们使用的是Visual Studio 2010,因此必须使用MSBuild 4.0或它会产生其他错误(与VS2010使用的新警告代码有关)。 这似乎工作正常,并且为大多数dll生成.Net 3.5 dll。
  • MSBuild进程调出resgen.exe和sgen.exe分别生成资源文件和XmlSerializer文件。由于我们使用的是MSBuild 4.0,因此它将查找Windows SDK 7.1。我已经安装了该版本。我还安装了Windows SDK 7.0。
  • 无论我针对的框架是什么,构建过程都会在WinSDK 7.1下调用sgen.exe,并生成.Net Framework 4.0 [MyType] .XmlSerializer.dlls。它是否正确?

据我所知,我的选择是:

  • 如果我改变目标是针对较旧的v3.5 MSBuild工具,则VS2010已在解决方案文件中添加了警告,警告该文件使MSBuild 3.5停止运行并破坏了构建。这不是真正的选择。
  • 尝试将注册表中的路径更改为本主题中讨论的工具,但看不到任何更改。
  • 在服务器上安装VS2010。显然,VS2010使用了中间的WinSDK v7.0A,而获得此功能的唯一方法是在服务器上安装VS2010。这不是真正的选择。
  • 更改项目以不生成XmlSerializer.dlls。这行得通,但看起来有点俗气,因为它并不能真正解决问题,我也担心性能问题。

我想念什么吗?我还有其他选择吗?

.net msbuild teamcity visual-studio

6
推荐指数
1
解决办法
6385
查看次数

Web应用程序中的时区敏感日期和时间显示?

我正在寻找在用户当前时区以外的时区中在Web应用程序中显示时间的建议.

我们将日期/时间以UTC/GMT格式存储在数据库中,因此格式化UTC/GMT时间或用户当前时区不是问题.但是,在其他情况下,我们需要从任意时区的角度显示时间(即此页面上的每个日期/时间都在东部,无论用户是否在西海岸,中部,东部,等等.).

在过去,我们已经存储了偏移量或时区信息,然后在.Net中的服务器代码中进行了计算,或者我们已经在javascript中做了一些我希望避免的客户端操作,因为它们都变得非常依赖于javascript和用户的浏览器.我想知道在更客户端/ MVC类型的应用程序中执行此操作的最佳方法.

这是一个例子:

  1. 日期存储在db:1302790667(星期四,2011年4月14日14:17:47 GMT)
  2. 在中部时区显示的客户转换日期:2011年4月14日星期四09:17:47
  3. 我实际想要显示的日期,总是在东部时区:2011年4月14日星期四10:17:47

在上面的示例中,很容易获得UTC(#1)或用户当前时区(#2)的时间,但获得#3更加困难.我的选择似乎是:

  1. 在数据库中存储偏移量或时区并在客户端上进行计算 - 这是我们过去用.Net所做的事情,但在客户端代码中看起来更加混乱是我们目前试图避免的路径.
  2. 在服务器上进行转换并向客户端发送完整日期以显示 - 客户端收到一个字符串("Thu Apr 14 10:17:47 2011").这有效,但不是很灵活.
  3. 在服务器上进行转换,将其分解为部分并将其发送到客户端,然后将它们重新组合在一起.("{DayOfWeek:Thu,Month:Apr,Day:14,Hour:10,Minute:17}").这为我们提供了正确的数据,并为我们格式化日期提供了更大的灵活性,但对于这种情况感觉有点不对劲.

还有其他选择吗?其他人如何处理类似情况?谢谢.

.net javascript asp.net asp.net-mvc datetime

5
推荐指数
1
解决办法
823
查看次数

ASP.Net移动Web表单发生了什么?

以前,Visual Studio具有用于移动Web表单的模板(而不是移动SDK).它们似乎在Visual Studio 2008中消失了,我见过的唯一解决方案是从Omar下载一些模板:

http://blogs.msdn.com/webdevtools/archive/2007/09/17/tip-trick-asp-net-mobile-development-with-visual-studio-2008.aspx

这是否受支持,如果是这样,支持的解决方案?

.net asp.net mobilewebforms

3
推荐指数
1
解决办法
3580
查看次数