小编Nex*_*xus的帖子

DDD和客户端验证

假设您有一个使用域模型模式,DDD和许多其他设计模式的应用程序.假设我们有许多解决方案,如下所示:

  • Solution.Model
  • Solution.Repository
  • Solution.Services
  • Solution.Presentation
  • Solution.UI.Web

用户体验层将是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

7
推荐指数
2
解决办法
1954
查看次数

XPathDocument与XmlDocument

我正在开发ASP.NET中的博客引擎,并且实现了一个存储库以使用XML文件作为数据存储.XML存储库主要用于本地使用和测试目的.现在虽然它可能不是今天拥有大量可用内存和处理能力的计算机的问题,但我想了解一些具体细节:

  • XPathDocument是一个只读文档,而XmlDocument是一个读/写文档.因此,XPathDocument是否比XmlDocument更轻量级,因为它缺乏编写功能?
  • 我确信当您使用XmlDocument加载XML文档时,它会将整个文档加载到内存中,如果文档大小很大,则可能会出现问题.XPathDocument做同样的事情吗?如果是这样,如何在不首先将整个文档加载到内存中的情况下从XML文档中读取单个节点或一组节点?我知道我可以使用XmlTextReader,但这意味着我必须在顺序访问节点时解析整个文档.我希望能够使用XPath表达式查询XML文档.

无论如何,如果对象图的大小差别不大(XmlDocument和XPathDocument),那么完成工作就不会有什么坏处,但我想在这里实现最好的解决方案.

.net c# xml asp.net linq-to-xml

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

ASP.NET成员资格和基于角色的安全性

我正在用ASP.NET&开发一个博客引擎C#.主要解决方案包括下面列出的几个项目

  • DomainModel :存储库的域实体和接口
  • AppService :应用程序服务,视图模型映射器,消息等
  • Repositories :EF存储库,XML存储库,存根存储库
  • Presentation :实现MVP模式(视图,演示者,接口)

用户端项目WebForms现在是一个Web应用程序,项目即将完成.最后一件事是将整个系统整合在一起ASP.NET Membership.有两件事需要考虑.

首先,ID博客数据库中的成员资格数据库只需要一个用户帐户.最后,必须在UI项目中实现基于角色的安全性.因为我对分布式应用程序开发,DDD和其他东西都很陌生,我想知道基于角色的安全性的实现是否仅仅是UI应用程序的责任,或者在其他应用程序中还有其他需要注意的事项.解决方案的各个层面.据我所知,目前只有视图(网页)必须实现基于角色的安全性并呈现不同的内容,并根据当前会话提供不同的功能.但这就是全部吗?

我知道这可能是一个普遍的问题,当然实施和设计会因项目需求而异.但是如果在分布式/分层应用程序中实现基于角色的安全性和表单身份验证时有一般的经验法则,那么事先了解它们会很棒.例如:

  • 安全实施只是UI应用程序的责任吗?
  • 我可以调整/更改我的域模型和/或其他层的设计,以便基于角色的安全性的实现更容易,而不是完全落在UI应​​用程序上.
  • 在其他层中考虑安全性是一个好主意,因此UI层只是数据的表示和用户与系统之间的媒介.

.net asp.net domain-driven-design asp.net-membership n-tier-architecture

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

Cordova iOS在定位远程服务器时崩溃

我有一个基于Angular 1.6和Ionic v1的cordova应用程序.我在iOS上面临一个可怕的问题,我甚至不知道出了什么问题.我将解释这个问题以及到目前为止我所尝试的内容,希望有人会对此有所了解.

问题
我们有一个简单的屏幕,你可以填写一些文字并添加附件.对于附件,您可以:

  • 从相机拍照
  • 用相机拍摄视频
  • 录制音频
  • 从您的图书馆中选择
  • 从您的iCloud Drive(iOS)或文件系统(Android)中选择

然后,您可以保存记录,该记录将所有内容存储在文件系统上.或者上传到服务器,再次将记录存储在您的设备上.

问题是,当我从库或任何其他来源选择文件时,应用程序很快意外崩溃.我可以添加附件并保存/上传,但是当我离开时,应用程序崩溃了.这只发生在iOS上.没有错误,没有警告,没有可调试的输出,只是崩溃.我检查了iPhone上的崩溃日志,显然主线程被阻塞超过5秒.这导致看门狗违规异常被抛出.很难说是什么导致这个线程锁定,不知道.

我正在使用运行iOS 12.1的iPhone 8.值得一提的是,该应用程序在模拟器上工作正常,没有错误或崩溃.

我迄今为止所做的
一切起初,我认为我的代码可能出了问题.所以我逐行检查了每个代码文件,重构了我的JS代码并提高了代码质量.确保promises按预期工作,解决JSLint/TSLint警告等问题.

我已将所有cordova插件更新到最新版本.同时删除了两个平台并添加了最新版本.他们都没有帮助.所以我想也许我错过了配置怪癖等等.通过github文档和SO线程挖掘,找不到任何有用的东西.我尝试过的其他一些事情:

  • 在我们的生产服务器上禁用HTTPS,并通过HTTP发送所有内容
  • NSAppTransportSecurity设置添加到*.plist文件,并在我们的域中列出白名单
  • 使用内容安全策略进行修改,甚至完全删除它
  • 隐私说明已正确配置(NSCameraUsage等)

他们都没有工作.我已经在这个问题上苦苦挣扎了两个星期了.

奇怪的部分
令我困惑的是,当我定位我的本地开发机器时,也就是说,当我将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)

mobile ios ionic-framework cordova-ios

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