假设您有一个使用域模型模式,DDD和许多其他设计模式的应用程序.假设我们有许多解决方案,如下所示:
用户体验层将是Solution.UI.Web,我们假设它将是一个ASP.NET WebForms应用程序.你如何执行客户端验证?
有许多事情需要考虑:
首先,我们不应该点击应用程序/数据库服务器将任何验证错误返回给客户端,但我们也可以实现服务器端验证,但我们还需要客户端验证.
其次,我们不希望在用户体验层上实现验证规则.那是因为如果您的应用程序是WebApp,然后您决定创建一个WinApp客户端,那么您将不得不再次实施验证规则 - >维护噩梦.
一种简单的方法是使用ViewModel对象(将被发送到客户端的域实体的展平视图)实现验证逻辑,然后在命中应用程序/数据库服务器之前验证这些对象.
我见过的另一种方法是在不同的应用程序中多次使用,只是生成一组验证错误消息并将该集合发送给客户端.那没关系,但是有问题.只是一个简单的验证错误摘要消息将不会发生,特别是如果您有大数据输入表单.
现在,ASP.NET MVC框架使生活变得更加容易.您可以使用EF + DataAnnotations,而MVC Scaffolding框架可以为您完成大部分工作.但是如果你想创建一个MVC应用程序并使用jQuery和JavaScript实现验证逻辑就是这种情况.
但是,如果你需要一种更通用的方法来实现一个可以在不同的应用程序中使用和使用的验证框架,比如WinForms和WebForms呢?
只是为了澄清,我正在寻找的是一组设计模式/原则和/或技术/框架,以实现一个验证框架,该框架可以使用您的域模型实现,然后在您的客户端应用程序上实施.并且,我不想只返回关于破坏的规则或任何东西的字符串错误消息的集合,我希望能够在验证失败时更新我的数据绑定控件(TextBox,ComboBox,DateTimePicker等),以便用户体验层将更直观(如果您愿意).
我已经看到了一些实现和框架,我已经使用了ASP.NET MVC客户端验证一段时间了,所以我的答案与MVC或JavaScript验证没有任何关系.
.net domain-driven-design client-side-validation n-tier-architecture
我正在开发ASP.NET中的博客引擎,并且实现了一个存储库以使用XML文件作为数据存储.XML存储库主要用于本地使用和测试目的.现在虽然它可能不是今天拥有大量可用内存和处理能力的计算机的问题,但我想了解一些具体细节:
无论如何,如果对象图的大小差别不大(XmlDocument和XPathDocument),那么完成工作就不会有什么坏处,但我想在这里实现最好的解决方案.
我正在用ASP.NET&开发一个博客引擎C#.主要解决方案包括下面列出的几个项目
DomainModel :存储库的域实体和接口AppService :应用程序服务,视图模型映射器,消息等Repositories :EF存储库,XML存储库,存根存储库Presentation :实现MVP模式(视图,演示者,接口)用户端项目WebForms现在是一个Web应用程序,项目即将完成.最后一件事是将整个系统整合在一起ASP.NET Membership.有两件事需要考虑.
首先,ID博客数据库中的成员资格数据库只需要一个用户帐户.最后,必须在UI项目中实现基于角色的安全性.因为我对分布式应用程序开发,DDD和其他东西都很陌生,我想知道基于角色的安全性的实现是否仅仅是UI应用程序的责任,或者在其他应用程序中还有其他需要注意的事项.解决方案的各个层面.据我所知,目前只有视图(网页)必须实现基于角色的安全性并呈现不同的内容,并根据当前会话提供不同的功能.但这就是全部吗?
我知道这可能是一个普遍的问题,当然实施和设计会因项目需求而异.但是如果在分布式/分层应用程序中实现基于角色的安全性和表单身份验证时有一般的经验法则,那么事先了解它们会很棒.例如:
.net asp.net domain-driven-design asp.net-membership n-tier-architecture
我有一个基于Angular 1.6和Ionic v1的cordova应用程序.我在iOS上面临一个可怕的问题,我甚至不知道出了什么问题.我将解释这个问题以及到目前为止我所尝试的内容,希望有人会对此有所了解.
问题
我们有一个简单的屏幕,你可以填写一些文字并添加附件.对于附件,您可以:
然后,您可以保存记录,该记录将所有内容存储在文件系统上.或者上传到服务器,再次将记录存储在您的设备上.
问题是,当我从库或任何其他来源选择文件时,应用程序很快意外崩溃.我可以添加附件并保存/上传,但是当我离开时,应用程序崩溃了.这只发生在iOS上.没有错误,没有警告,没有可调试的输出,只是崩溃.我检查了iPhone上的崩溃日志,显然主线程被阻塞超过5秒.这导致看门狗违规异常被抛出.很难说是什么导致这个线程锁定,不知道.
我正在使用运行iOS 12.1的iPhone 8.值得一提的是,该应用程序在模拟器上工作正常,没有错误或崩溃.
我迄今为止所做的
一切起初,我认为我的代码可能出了问题.所以我逐行检查了每个代码文件,重构了我的JS代码并提高了代码质量.确保promises按预期工作,解决JSLint/TSLint警告等问题.
我已将所有cordova插件更新到最新版本.同时删除了两个平台并添加了最新版本.他们都没有帮助.所以我想也许我错过了配置怪癖等等.通过github文档和SO线程挖掘,找不到任何有用的东西.我尝试过的其他一些事情:
他们都没有工作.我已经在这个问题上苦苦挣扎了两个星期了.
奇怪的部分
令我困惑的是,当我定位我的本地开发机器时,也就是说,当我将API调用的基本URL设置为指向我的本地IIS时,应用程序运行得非常好.没有错误/错误,没有崩溃.
但是当我瞄准我们的远程服务器时,当我尝试使用附件(相机,iCloud等)时,应用程序崩溃了.我不知道我在这里缺少什么.我的机器和远程服务器之间没有区别.两者都运行完全相同的软件,相同的配置,并且移动应用程序是相同的构建,在同一设备上运行.
所以我可以肯定地说,这个问题与我的应用程序代码或Cordova及其插件无关.在定位我的本地IIS时,相同的构建工作完美.
我的应用程序已经投入生产,现在需要修复.这让我很生气,我已经尝试了所有我能想到的东西,但仍然没有运气.有没有人有类似的问题?任何帮助表示赞赏.
我没有权限分享我的代码,就像我说的那样,代码没有任何问题,在针对我的本地IIS时,它的工作原理非常好.但是供您参考,这里有一些关于我的项目的信息.
Config.xml中的首选项
<preference name="SplashScreen" value="screen" />
<preference name="windows-target-version" value="10.0" />
<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="BackupWebStorage" value="local" />
Run Code Online (Sandbox Code Playgroud)
Cordova插件
<plugin name="cordova-plugin-geolocation" spec="^2.4.3">
<variable name="GEOLOCATION_USAGE_DESCRIPTION" value="Location access allows …Run Code Online (Sandbox Code Playgroud)