我经常使用AutoMapper将模型(域)对象映射到ViewModel对象,然后由我的视图以模型/视图/视图模型模式使用.
这涉及许多"Mapper.CreateMap"语句,这些语句都必须执行,但只能在应用程序的生命周期中执行一次.
从技术上讲,我应该将它们全部保存在某个静态方法中,从我的Application_Start()方法调用它(这是一个ASP.NET MVC应用程序).
但是,在一个中心位置将许多不同的映射问题组合在一起似乎是错误的.
特别是当映射代码变得复杂并涉及格式化和其他逻辑时.
是否有更好的方法来组织映射代码,使其与所关注的ViewModel保持接近?
(我提出了一个想法 - 在每个ViewModel上有一个'CreateMappings'方法,在BaseViewModel中,在实例化时调用此方法.但是,由于该方法只应在应用程序生命周期中调用一次,因此需要一些额外的逻辑缓存已调用CreateMappings方法的ViewModel类型列表,然后仅在必要时为不在该列表中的ViewModel调用它.)
我有一个NSDictionary,其中键和值都是NSStrings,我想以它们的形式从它们创建一个NSString
Key1: Value1
Key2: Value2
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方法是什么?
我是CSLA和实体框架的新手.我正在创建一个新的CSLA/Silverlight应用程序,它将取代已有12年历史的Win32 C++系统.旧系统使用自定义DCOM业务对象库并使用ODBC来访问SQL Server.新系统不会立即取代旧系统 - 它们必须在未来几年内与同一数据库共存.
起初我认为EF是最先进和最好的方式.在制作一个小型EF模型并且只有2个CSLA可编辑的根对象(我最终会有数百个对象,因为我的数据库有800多个表)时,我正在质疑EF的使用.
在当前的系统中,我需要多次对查询进行精细的细节性能调优,因为我可以100%控制生成的SQL.但是在EF看来,在幕后发生的这么多事情让我失去了控制权.像http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html这样的文章并没有帮助我对EF的印象.
由于LINQ to EF,人们似乎喜欢EF,但由于我的标准在客户端和服务器之间作为标准对象传递,因此我似乎可以在没有LINQ的情况下轻松构建查询.我在WCF RIA中了解到有查询投影(或类似的东西)我可以做客户端LINQ,它在转换为实际SQL之前会移动到服务器,所以在这种情况下我可以看到EF的好处,但不是CSLA的好处.
如果我使用原始ADO.NET,我会在5年后后悔自己的决定吗?
最近有没有其他人做过这个选择,你走哪条路?
如果你有二进制数10110我怎么能让它返回11111?例如,在第一个1之后将所有位设置为1的新二进制数,下面列出了一些类似的例子:
101应返回111(3位长度)011应返回11(2位长度)11100应返回11111(5位长度)101010101应返回111111111(9位长度)
如何在Java中获得最简单的方法?我可以想出一些方法,但它们不是很"漂亮".
我正在尝试为网络编程创建一个类.这将创建一个带有线程的通用套接字.
但是当我尝试使用createthread()创建线程时.第三个参数是产生错误.从网上我开始知道我不能使用成员函数作为createthread()的参数.
我能做到这一点吗?
这是一个锁,一次只能由一个执行线程持有.尝试通过另一个执行线程获取锁定使得后者循环直到锁定被释放.
当两个线程试图在同一时间获取锁时,它如何处理?
我认为这个问题也适用于其他各种互斥实现.
我非常喜欢这个strtotime()功能,但是用户手册没有提供支持的日期格式的完整描述.strtotime('dd/mm/YYYY')不起作用,它只适用于mm/dd/YYYY格式.
如果我有dd/mm/YYYY格式化日期,我该如何将其转换为YYYY-mm-dd?我可以通过使用explode()函数来实现,但我认为有更好的解决方案.
我在WinXP机器上安装了Erlang.因此,我用"werl.exe"来使用它.问题是,我想更改werl启动的默认文件夹.我找不到可以让我这样做的选项,虽然我知道必须有类似的东西.有人可以帮忙吗?
这是一些简单的代码,对于指定的每个参数,将添加以该参数命名的特定get/set方法.如果你写attr_option :foo, :bar,那么你将看到#foo/foo=和#bar/bar=实例方法Config:
module Configurator
class Config
def initialize()
@options = {}
end
def self.attr_option(*args)
args.each do |a|
if not self.method_defined?(a)
define_method "#{a}" do
@options[:"#{a}"] ||= {}
end
define_method "#{a}=" do |v|
@options[:"#{a}"] = v
end
else
throw Exception.new("already have attr_option for #{a}")
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我想写一些RSpec测试来验证这段代码实际上正在做它应该做的事情.但是有一个问题!如果我attr_option :foo在其中一个测试方法中调用,那么现在在Config中永远定义了该方法.因此,后续测试将失败,因为foo已经定义:
it "should support a specified option" do
c = Configurator::Config
c.attr_option :foo
# ...
end
it "should support …Run Code Online (Sandbox Code Playgroud) 此问题的灵感来自此问题,其中包含以下代码段.
int s;
if((s = foo()) == ERROR)
print_error();
Run Code Online (Sandbox Code Playgroud)
我发现这种风格难以阅读并且容易出错(正如原始问题所示 - 它是由于在作业周围缺少括号而引起的).我会写下面的内容,实际上字符更短.
int s = foo();
if(s == ERROR)
print_error();
Run Code Online (Sandbox Code Playgroud)
这不是我第一次看到这个成语,我猜这里经常使用的原因(也许是历史的).这些原因是什么?
c++ ×2
asp.net-mvc ×1
automapper ×1
binary ×1
c ×1
callback ×1
cocoa ×1
coding-style ×1
concurrency ×1
csla ×1
erlang ×1
int ×1
iphone ×1
java ×1
mutex ×1
mvvm ×1
objective-c ×1
php ×1
rspec ×1
ruby ×1
spinlock ×1
testing ×1
windows ×1