我有一个数据访问层,一个服务层和一个表示层.表示层是ASP.NET MVC2 RTM(Web),服务层是WCF(服务).这都是.NET 3.5 SP1.
问题是在服务中,返回的对象用[DataContract]属性标记.Web正在使用AppFabric Cache(aka Velocity)SessionStateProvider来存储会话状态.因此,我在会话中存储的任何内容都必须是可序列化的.
问题就出现了:DataContracts没有标记,[Serializable]并且据我所知,通过将它引入已经标记出[DataContract]某些问题的类,因此我不相信这是一个解决方案.
我最初计划在Web层使用DataContracts,将它们用作与渲染DataContracts相关的视图的模型(可能嵌套在更高级别的ViewModel类中).但是由于会话状态提供程序要求存储在其中的所有对象都是可序列化的,所以我开始重新考虑这种策略.尽管如此,它会很好,因为它们包含使用IDataErrorInfo接口的验证逻辑,并且相同的验证逻辑可以作为模型绑定的一部分在MVC中重用.
您认为什么是让我减少所需工作的最佳方式?
我目前想到了以下不同的方式:
A.在Web项目中创建"ServiceIntegration"部分.
这将是我的控制器和我的WCF服务层之间的中间人.ServiceIntegration部分将使用DataContracts与服务层对话,使用ViewModels与Web层对话,但必须使用双向Transformer在DataContracts和ViewModel之间进行转换.
此外,由于IDataErrorInfo验证不可重复使用,因此有必要为每个DataContract创建一个Validator,它使用Transformer从ViewModel转换为DataContract,使用IDataErrorInfo执行验证并返回其结果.然后将在控制器的动作方法中使用(例如if (!MyValidator.IsValid(viewModel)) return View();)
需要不同的类:xDataContract,xViewModel,xTransformer,xValidator
B.在Web项目中创建"SessionIntegration"部分
这将是控制器(或访问会话的任何内容)和会话本身之间的中间人.任何需要访问会话的内容都将通过此课程.DataContracts将在整个应用程序中使用,除非它们存储在会话中.SessionIntegration部分负责将DataContract转换为某种ISerializable形式,然后返回.由于在DataContract上使用了IDataErrorInfo接口,因此无需额外的Validator.
需要不同的类:xDataContract,xTransformer,xSerializableForm
注意:在两种情况下仍然会有ViewModels,但是(B)我可以从DataContracts组成ViewModels.
(B)具有不需要额外验证器的好处.
在我完全实现(A)/(B)之前,我想要一些反馈.目前,我开始倾向于(B),但是,(A)可能更灵活.无论哪种方式,对于它的价值而言似乎太过分了.有没有其他人遇到过这个问题,你是否同意/不同意我,和/或你有其他办法解决这个问题吗?
谢谢,
詹姆士
asp.net-mvc session datacontract iserializable session-state-provider
对于基于autotools的C项目,我想从编译器中获得更多警告(例如至少在CFLAGS中使用-Wall).在不破坏任何内容的情况下启用编译器标志的首选方法是什么?是否有m4宏来测试编译器是否理解给定的编译器标志?有了这样一个宏,我能做到
TEST_AND_USE(-Wall -Wextra <other flags>)
Run Code Online (Sandbox Code Playgroud)
谢谢
我想查找最旧的目录(在目录中),并删除它.我使用以下内容:
rm -R $(ls -1t | tail -1)
Run Code Online (Sandbox Code Playgroud)
ls -1t | tail -1 确实给了我最老的目录,问题是它没有删除目录,而且它也列出了文件.
我怎么能解决这个问题?
我一直在想为什么将python安装在名为Frameworks的目录中?(虽然不是Framework)
$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
Run Code Online (Sandbox Code Playgroud)
有人请解释!谢谢!
any good open source/commercial PHP testing tools available??
我们有一个相当大的代码库.绝大多数代码是使用qmake编译来生成makefile的.但是,有一些子项目可以通过运行批处理文件或运行其他程序来生成.
我希望能够使用qmake编译所有内容,但我无法弄清楚如何让qmake简单地运行脚本.
我尝试过的一件事是在我的专业文件中使用QMAKE_EXTRA_TARGETS,如下所示:
TEMPLATE = lib
SOURCES = placeholder.cpp
CONFIG += no_link staticlib
batch_runner.target = placeholder.cpp
batch_runner.commands = my_batch_file.bat
QMAKE_EXTRA_TARGETS = batch_runner
Run Code Online (Sandbox Code Playgroud)
然后我必须让批处理文件生成placeholder.cpp,如下所示:
# do the real work here
# ...
# create placeholder.cpp so qmake and nmake are happy
echo // dummy >> placeholder.cpp
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.麻烦的是它有些笨拙.如果我没有指定batch_runner.target(即我将其留空)或者没有将placeholder.cpp放在SOURCES中,则批处理文件永远不会运行.这是因为qmake没有使batch_runner.commands成为Makefile中任何其他依赖项的操作.
有没有更好的方法让QMake构造一个Makefile,以便在Makefile执行时运行脚本?
我们的文件结构非常好,在单独的文件夹中组织功能.我的问题是其他人如何处理涉及超过500个JavaScript文件的应用程序.
我们编写了一个maven插件来将这些文件连接在一起(也运行YUI压缩器).但是,这涉及每次更改的3-10秒编译.
这个步骤是组织大型应用程序所必需的,我觉得结构良好的HTML文件吸引所有这些资源每天可以节省45分钟.
我必须创建一个Windows服务,它监视指定文件夹中的新文件并对其进行处理并将其移动到其他位置.
我开始使用FileSystemWatcher.我的老板不喜欢FileSystemWatcher并希望我使用Timer除了之外的任何其他机制来使用轮询FileSystemWatcher.
如何在不FileSystemWatcher使用.NET框架的情况下监控目录?
使用Delphi我想在边框图标按钮上添加另一个按钮; 关闭,最大化,最小化.关于如何做到这一点的任何想法?
内jQuery的一个常见的模式是需要被传递的阵列的元素及其该阵列内的索引的回调的方法.然而,似乎完全随机的是哪个论证首先出现.例如,来自http://api.jquery.com上的jQuery文档:
jQuery.each( collection, callback(indexInArray, valueOfElement) ).each( function(index, Element) )jQuery.map( array, callback(elementOfArray, indexInArray) ).map( callback(index, domElement) )jQuery.grep( array, function(elementOfArray, indexInArray), [ invert ] ).filter( function(index) )在三起案件(jQuery.each,.each,.map)指数是第一位的.在另外两个(jQuery.grep,jQuery.map)中,元素首先出现.我知道api现在已经确定了,但这对我来说似乎是一个严重的不一致.
有没有我缺失的模式或者这只是随机的?这应该修复还是我应该闭嘴并记住它们?