- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在思考这个问题一段时间,想不出一个可以接受的解决方案。我有一个计划变得非常大的应用程序。因此,我试图将其模块化。它基于MVC4。我还没有决定自己使用 ORM 或映射所有内容。我想要以下结构:
----------------------
| Database
----------------------
| Data/Data Access Layer (Class Library) (Objects reside here)
----------------------
| Core MVC Project (User and Session are stored here)
----------------------
| MVC Modules
我想让 UpdatedBy
字段的验证尽可能靠近数据库,可能在数据/数据访问层中。问题是我想将 user
存储在 Session
中,并在类库中进行验证(没有 Session
)。我还想尽可能避免到处传递 user
。有没有办法将用户存储在 Session
中,并让数据访问层访问该信息而不传递给 user
?有人对如何优雅地执行此操作有任何建议吗?
编辑:我想让validation
和CRUD
事件尽可能靠近Core MVC项目刚刚调用的数据层对象上的 Save()
和数据层验证对象,找出用户修改或创建它并将其保存到数据库。
编辑 2:数据层必须绝对不依赖于 MVC 层。
最佳答案
LastUpdated
可以通过数据库插入/更新上的 Trigger
轻松实现,但是 UpdatedBy
有点棘手。
一个关键问题是“您的业务层是否需要知道谁在使用它?”如果是这样,则可以将界面设计为要求在执行操作时提供用户名。如果不是,那么您需要使数据可以从业务层内部/后面访问,但无需明确提供给它(例如使用依赖注入(inject),或通过提供贯穿始终的上下文)。
您可以考虑使用围绕您的 Controller 操作的 ActionFilters 创建一个单独的审计跟踪,它提供对 Session
的轻松访问,并且可以创建您的用户执行的操作的运行历史记录。这可能会或可能不会 100% 正确地记录您的数据库,但确实提供了应用程序操作的清晰历史记录——这本身就很有值(value)。
您还可以考虑使用 Command
模式,应用程序由此生成在业务/数据层上执行的特定命令(例如 UpdateWidgetName
命令)。在某些方面,这就是 MVC 已经工作的方式,但是拥有一个捕获用户和日期的显式 Command
仍然是对您的业务层的有用补充。
另请注意将此记录在案本身的缺点。您将只知道谁最后编辑了记录——您将无法具体说出他们编辑了什么,或者谁之前编辑过。对于相对简单的场景,这通常就足够了,但远不能为记录提供实际的历史数据。
如果您真的想要 100% 的审计,您应该查看 Event Sourcing
设计模式,如果一个操作没有被审计,那么它实际上就没有发生。它与典型的 CRUD 方法截然不同,但非常强大(尽管最初设计起来更复杂)
另一个注意事项:考虑将您的业务和持久性代码分成两层。将它们捆绑在一起会使业务逻辑与持久性紧密耦合(不好),这将阻止它被重用。考虑实现一个 Repository
,它专用于保存和检索您的业务对象。这是有返回的。
关于c# - 实现 LastUpdated 和 UpdatedBy 的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516839/
我想使用Grails域的lastUpdated字段来实现“最近更改了哪些对象” View 。但是,我的域有一个“多方关联”,当添加某些内容时,该关联会导致lastUpdated值被更新。 例如。: c
我有一个带有 m2eclipse 和 subversive 的 Eclipse 设置。我从svn导入了maven2项目。但我收到错误消息,提示缺少一大堆工件(例如:缺少工件 org.springfra
我在 pom.xml 中有以下依赖项: 3.1.0 junit junit 3.8.1 test
有大量对象。集合是动态的:对象可以随时添加或删除。我们称对象总数为 N。 每个对象都有两个属性:上次更新的质量 (M) 和时间 (T)。 每隔 X 分钟,应从中选择一小批进行处理,这会将它们的 T 更
我已经将 com.spotify:dockerfile-maven-plugin:1.4.3 添加到我的 POM 中,它由于以下原因,无法完成 [INFO] --- dockerfile-maven-
我的 Elasticsearch 映射大致如下所示: { "myIndex": { "mappings": { "myType": { "_timestamp"
如何从表中选择最近更新的行。我的语法似乎有问题。 最佳答案 如果您需要最后更新的最新记录,那么您可以试试这个:: SELECT * FROM 'table' order by lastupdate
我有一个父域类,它有一个 hasMany另一个域类。父域和子域类都有 lastUpdated和 dateCreated领域。我的问题是,当我更新子域类时,我需要父域类来反射(reflect)该更改并更
据我所知,Database.Persist 不处理任何自动更新字段 ( Yesod Book Persistent )。 但存在一个特殊情况,它是相关的(至少对我来说:P),它是 lastUpdate
我一直在思考这个问题一段时间,想不出一个可以接受的解决方案。我有一个计划变得非常大的应用程序。因此,我试图将其模块化。它基于MVC4。我还没有决定自己使用 ORM 或映射所有内容。我想要以下结构: -
情况: 我有一个包含 10 个工作表和 15 个用户登录并修改它的电子表格。 脚本功能: 当有人修改任何列中的任何行时,此脚本将使用 DateTime 更新 lastcolumn 并插入带有进行该修改
当我尝试在本地存储库中安装 Maven 项目时,我注意到 pom 和 jar 文件具有 .lastUpdated 扩展名。由于这个问题,我无法构建依赖于它的项目。 您能解释一下为什么会发生这种情况吗?
我目前正在从事一个 Grails 项目,该项目以前是用其他语言编写的。所以我们有这个数据库,它的表名和列名,我们不应该改变。现在的问题是,用于时间戳的列名不是 date_created 或 last_
我定义了一个表(见下面的代码片段)。如何添加约束或其他任何内容,以便在行发生更改时自动更新 LastUpdate 列? CREATE TABLE dbo.Profiles ( User
我最近刚刚将我们的 Kentico CMS 升级到最新的修补程序。推送到生产服务器后,我在两台服务器上都收到以下错误。 有没有其他人解决过这个错误?我认为这与缓存有关,但我无法在此处指出问题所在。 我
我想在每次对该文档进行保存或更新操作时自动更新该文档上的 LastUpdatedOn 字段。 有没有某种方法可以自动执行此操作(我使用的是 C# 驱动程序),而不是将这种负担放在执行保存/更新的每一位
简短的问题: 怎么做 this在 MVC.NET 中? 长版问题: 我尝试使用 SQL 表中的 DateTime 列进行版本跟踪(这本身是作为在表的 editview 回传后重新附加 Linq2Sql
在这段代码中,我收到来自 PSScriptAnalyzer 的“UseDeclaredVarsMoreThanAssignments”警告 $lastUpdate = $false; $shouldU
我最近使用 grails-2.2.4 更新了我的 grails 应用程序,从使用 mysql 到 mariadb 版本 10.0.15-MariaDB-wsrep grails,我正在使用 galer
我是一名优秀的程序员,十分优秀!