小编Aks*_*vig的帖子

使用以数据为中心的方法在Spring MVC中维护清洁体系结构

使用以数据为中心的方法在Spring MVC中维护清洁体系结构

我正在尝试为我们正在制作的新的基于Java的Web应用程序(门户类型应用程序)的前端绘制架构.我希望从第一天起就做到这一点,我想在这里开始讨论,以帮助我在我的建筑设计中实施鲍勃叔叔的清洁建筑.

这是我们的技术堆栈从上到下的快速破坏(技术不重要,结构是):

  • Oracle数据库
  • Oracle Service Bus使用WSDL公开服务
  • JAX-WS从WSDL生成Java类(我们称之为"生成的服务层")
  • 由映射到生成的数据对象的POJO组成的域模块
  • 消费者模块将"生成的服务层"暴露给前端应用程序
  • 一个基于Spring MVC的前端模块,使用FreeMarker渲染视图

关键点:

特别是,外圈中声明的内容的名称不得被内圈中的代码提及.这包括功能,类.变量或任何其他命名的软件实体.

为了坚持Bob的Clean Architecture,我和自己一起来回顾了应用逻辑的位置,即他的架构中的"用例"层.

这是我提出的方法:

第1层 - 实体

实体封装了企业范围的业务规则.

这是包含域对象的 Domain模块所在的位置,这些是自包含的对象,彼此之间的依赖性最小.只有与对象本身有关的逻辑可以存在于这些域对象上,而不是特定于用例的逻辑.

使用转换数据的服务总线通过WSDL公开对数据库的访问,而不是像JPA或Hibernate这样的ORM.因此,我们没有传统意义上的"实体"(使用Ids),而是以数据为中心的方法使该层成为数据访问层,由Consumer模块呈现给应用程序的其余部分.

第2层 - 用例

此层中的软件包含特定于应用程序的业务规则.

这是我们的应用程序的用例特有的逻辑.对此层的更改不应影响数据访问层(第1层).对GUI或框架实现(Spring MVC)的更改不应影响此层.

这是一个有点棘手的地方: 由于我们的数据访问层(在第1层)必须保持清洁应用程序逻辑,我们需要一个便于以适合用例的方式使用该层的层.我发现这个问题的一个解决方案是使用我选择调用MVC-VM的" MVVM模式 " 的变体.请参阅下面的说明."VM"部分位于此Use Case层中,由-classes 表示,这些类封装了此特定于用例的逻辑.*ViewModel

第3层 - 接口适配器

此层中的软件是一组适配器,可将数据从最方便用户和实体的格式转换为某些外部机构(如数据库或Web)最方便的格式.

这就是我们GUI的MVC架构所在的位置(我们的"MVC-VM"中的"MVC").本质上,这是当Controller-classes从-classes中获取数据*ViewModel并将其放入Spring MVC的ModelMap对象中时,这些对象由View中的FreeMarker-templates直接使用.

我看到它的方式,在我们的情况下,servicebus也属于这一层.

第4层 - 框架和驱动程序

通常,除了与下一个圆圈内部通信的胶水代码之外,您不会在此图层中编写太多代码.

这个层实际上只是我们应用程序中的配置层,即Spring配置.例如,这将指定FreeMarker用于渲染视图的位置.


模型视图ViewModel模式

MVVM有助于将图形用户界面的开发(作为标记语言或GUI代码)与业务逻辑或称为模型的后端逻辑(也称为数据模型)区分开来,以区别于视图模型).MVVM的视图模型是一个值转换器,意味着视图模型负责从模型中公开数据对象,以便轻松管理和使用这些对象.

更多关于维基百科的MVVM模式.

MVC-VM角色将在我们的应用程序中实现,如下所示:

  • 模型 - 仅由ModelMapSpring MVC中由视图模板使用的数据结构表示.
  • 查看 - …

java architecture model-view-controller spring-mvc mvvm

14
推荐指数
3
解决办法
8187
查看次数

Samba 4.10 服务器配置:使用模块“vfs_fruit”更改 Mac 客户端的文件创建掩码,我无法控制它

TLDR;随着vfs objects = catia fruit streams_xattr我的smb.conf,使用苹果电脑的股票中创建的文件不继承权限,并得到扩展ACL。

背景

我正在为我们的办公室设置一个带有 Samba 共享的 NAS,这是一个 50/50 macOs/Windows 10 商店。每个人都应该可以使用专用用户帐户访问共享。

在 Mac 的性能和 TimeMachine 支持方面,我想利用 Samba 4 中的最新增强功能,因此我启用了这些模块 vfs objects = catia fruit streams_xattr

问题

权限不会被继承,并且这些vfs objects集合不尊重掩码。我已经尝试了多种force createcreate masks的组合,并且(如下例所示)inherit permissions 如果没有设置vfs objects模块,权限也符合预期。

我的smb.conf(相关摘录):

[global]

   server string = %h server (Samba, Ubuntu)
   server role = standalone server
   client signing = disabled
   unix password sync = yes
   vfs objects = catia fruit …
Run Code Online (Sandbox Code Playgroud)

permissions macos ubuntu samba vfs

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

在 iFrame 中引用时,“deviceorientation”不会在 iOS 浏览器中触发

我正在制作一个在 iframe 中运行“360 全景查看器”的网站,其中源页面使用 JavaScript 并window.DeviceOrientationEvent确定用户是否使用具有方向功能的移动设备。我在 iOS Safari 和 Chrome 上看到一些奇怪的行为:

window.DeviceOrientationEvent计算结果为 true,但deviceorientation事件永远不会被触发。

Android Chrome 的情况并非如此 - 在 iF​​rame 中使用时,该事件会按预期连续触发。

当直接访问页面(在 iOS 上)时,我看到事件触发。就好像在 iframe 中使用它会以某种方式“阻止”此事件。

这对我来说没有什么意义,研究它并没有透露多少信息,除了一些模糊的迹象[1, 2],它实际上可能与 CORS 有关 - 无论 iframe 源是否与父页面位于同一根域上。这对我来说更没有意义..

有人知道吗?

1 2

html javascript iframe ios

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