标签: separation-of-concerns

Ruby on Rails与存储库模式?

在使用ASP.Net MVC之后,我想到了Rails.我之前和Rails一起工作过,但是有点生疏了.ASP.Net MVC教程建议使用存储库模式隐藏数据层实现.这允许简单的依赖注入进行单元测试,以及控制器与模型实现的良好解耦.

我记得Rails的控制器直接使用Active Record对象,并使用可以轻松设置和拆卸的测试数据库进行单元测试.这解决了换掉单元测试的需要,但是在控制器中暴露出如此多的ActiveRecord代码仍然是一个坏主意.

所以我的问题是,这里最新的最佳做法是什么?真实(非模拟)数据库是否仍用于单元测试?Rails开发人员直接调用ActiveRecord还是抽象?

ruby unit-testing ruby-on-rails separation-of-concerns repository-pattern

13
推荐指数
2
解决办法
6501
查看次数

如何为可重用组件组织Redux状态?

TL; DR:在具有管理其自己的状态有些复杂的逻辑可重用的组件的情况下(认为:与autocompleter Facebook的评论文字区域,表情符号等),一个人如何使用存储,操作和减速器进行管理的多个实例的状态这个组件遍布整个网站?

考虑官方redux回购中的真实示例.在其中我们有:

  • 一个RepoPage,它显示谁已经出演一个特别的回购协议的用户列表中,
  • 一个UserPage,显示由特定用户加星标的repos列表
  • 一个List,它足够通用,可以显示用户列表或repos,提供了方法items和方法renderItem.特别是RepoPage使用User组件来显示为回购加星标的每个用户,并UserPage使用Repo组件来显示每个加星标的回购.

假设我真的希望所有的状态都在Redux中.

特别是,我希望每个RepoPage和UserPage上的每个List的状态都由Redux管理.在这个例子中已经通过一个聪明的三级深树来处理:

  • 在顶层,密钥表示它是什么类型的组件数据(在示例中称为store.pagination)
  • 然后,每个特定类型的上下文都有一个分支,其中组件可以是(store.pagination.starredByUser,store.pagination. stargazersByRepo)
  • 然后有与唯一上下文一样多的键(store.pagination.starredByUser[login],store.pagination. stargazersByRepo[repo])

我觉得这三个级别也对应于:组件类型,父类型,父ID.

但是,我不知道如何扩展这个想法,以处理List组件本身有很多子项的情况,其中一个状态值得在Redux中进行跟踪.

特别是,我想知道如何实现一个解决方案,其中:

  • User 组件保持完整
  • Repo 组件有一个切换其背景颜色的按钮
  • 每个Repo组件的状态由Redux管理

(我很高兴使用Redux的一些扩展,它仍然使用Reducer,但是不想使用"只是将它保持在React本地状态",为此问题的目的)

我的研究到目前为止:

  • 它看起来像在榆树​​上的操作(消息)是可嵌套以这样的方式代数数据类型,即父组件可以解压缩的消息的"外信封"和到子减速器传递旨在用于儿童一个内动作(更新).
  • 因为它是终极版公约使用字符串作为动作类型,上述想法的自然转换为使用前缀,而这似乎正是棱镜(foremly称为终极版-榆树)的作用:action.type是由通过组件树告诉路径的子串.OTOH在这篇评论中,棱镜作者tomkis解释说,Redux缺少的Elm Architecture最重要的部分是动作的组合
  • 上述两种方法似乎是重用Reducer Logic中描述的方法的扩展版本
  • 我还没有完全理解redux-fly如何在内部工作,但它似乎使用有效负载,而不是action.type通过其安装路径识别组件实例,store其中也对应于组件树中的路径,因为它的方式是由组件手动构建 …

code-reuse components separation-of-concerns redux

13
推荐指数
1
解决办法
2260
查看次数

实体框架6数据库优先和洋葱架构

我首先使用Entity Framework 6数据库.我正在转换该项目以实施洋葱架构,以便更好地分离关注点.我阅读了很多文章并观看了很多视频,但在决定我的解决方案结构时遇到了一些问题.

我有4个项目:核心,基础设施,网络和测试.

根据我的了解,.edmx文件应放在我的"Infrastructure"文件夹下.但是,我还阅读了有关使用Repository和Unit of Work模式来帮助EF解耦和使用依赖注入的信息.

有了这个说:

  • 我是否必须在CORE下为模型中的所有实体创建存储库接口?如果是这样,如何在庞大的数据库中维护这个?我已经研究过自动播放器,但发现了IEnumererables与IQueryables有关的问题,但有一个扩展可用它必须与此一起发布.我可以更深入地尝试这条路线但是想先听一听.

  • 作为替代方案,我应该将我的edmx保留在Infrastructure中并将我的实体的.tt T4文件移动到CORE吗?这是否存在紧密耦合或良好的解决方案?

  • 通用存储库界面是否适用于您提供的建议?或者EF6已经解决了Repository和UoW模式问题?

感谢您查看我的问题,并提出任何其他回复.

我在这里发现了一个类似的帖子没有回答: EF6和Onion架构 - 数据库优先,没有Repository模式

entity-framework separation-of-concerns n-tier-architecture automapper onion-architecture

12
推荐指数
1
解决办法
5366
查看次数

ASP.NET MVC - 分离大型应用程序

我一直对我认为矛盾的方面感到困惑:ASP.NET MVC声称要进一步支持"关注分离"的座右铭,我发现这是一个好主意.

但是,似乎没有办法将控制器,模型或视图分离到它们自己的组件中,或者将区域分成组件.

与固定Controller,ModelView夹在你的ASP.NET MVC,你实际上创建的事情了巨大的杂牌波奇.是关注的分离,真的吗?似乎与我完全相反.

所以我想知道:

  • 如何创建一个ASP.NET MVC解决方案,将控制器,模型和充满视图的文件夹分离到单独的程序集中?

  • 如何将ASP.NET MVC 2的区域放入单独的程序集中?

  • 或者你如何管理一个大的ASP.NET MVC应用程序 - 它有几十个甚至一百多个控制器,很多模型和视图模型类,以及几百个视图?

asp.net-mvc separation-of-concerns

11
推荐指数
3
解决办法
5110
查看次数

"CreateMap"语句应该放在哪里?

我经常使用AutoMapper将模型(域)对象映射到ViewModel对象,然后由我的视图以模型/视图/视图模型模式使用.

这涉及许多"Mapper.CreateMap"语句,这些语句都必须执行,但只能在应用程序的生命周期中执行一次.

从技术上讲,我应该将它们全部保存在某个静态方法中,从我的Application_Start()方法调用它(这是一个ASP.NET MVC应用程序).

但是,在一个中心位置将许多不同的映射问题组合在一起似乎是错误的.

特别是当映射代码变得复杂并涉及格式化和其他逻辑时.

是否有更好的方法来组织映射代码,使其与所关注的ViewModel保持接近?

(我提出了一个想法 - 在每个ViewModel上有一个'CreateMappings'方法,在BaseViewModel中,在实例化时调用此方法.但是,由于该方法只应在应用程序生命周期中调用一次,因此需要一些额外的逻辑缓存已调用CreateMappings方法的ViewModel类型列表,然后仅在必要时为不在该列表中的ViewModel调用它.)

asp.net-mvc mvvm separation-of-concerns automapper

11
推荐指数
2
解决办法
1485
查看次数

逻辑和UI的分离

我正在Qt开发一个GUI应用程序.

这是我的第一个GUI应用程序,我不是很有经验,仍然需要与C++和Qt框架的一些更高级的方面进行斗争.

该应用程序非常简单,具有主窗口和一些用户配置设置并按下按钮的对话框,程序执行(非常复杂)计算,在UI上的某处提供结果.

现在,我遇到了问题.我将所有计算数据(静态和从资源加载)和逻辑放到一个单独的类中.我创建了这个类和UI类的实例.现在,问题是如何从UI类访问数据/逻辑类的成员?假设有一个QStringList位于Logic类中,我想要一个特定的对话框来访问该列表并将其呈现给用户,而不在内存中复制它?

我知道这可能是一个非常基本的C++问题(Qt甚至不相关),但不是每个人都是编程向导.感谢任何提示或帮助!

c++ qt separation-of-concerns

11
推荐指数
2
解决办法
4227
查看次数

从实体框架数据库生成接口首先自动生成代码

我在Visual Studio 2010中使用MVC3,C#4.0和Entity Framework.我正在从数据库生成edmx和Designed.cs文件.然后,我将从Designer.cs文件中的实体生成接口,作为我的nLayer结构的一部分.

原始代码是

public partial class DataEntrySummary : EntityObject
Run Code Online (Sandbox Code Playgroud)

然后变成

public partial class DataEntrySummary : EntityObject, Mb.Interface.IDataEntrySummary
Run Code Online (Sandbox Code Playgroud)

我担心的是,当数据库发生变化(它会)并重新生成edmx文件时,我将失去所有的接口定义.

有没有更好的方法来实现相同的结果,而无需重新生成接口.

谢谢

c# entity-framework separation-of-concerns

11
推荐指数
1
解决办法
5143
查看次数

存储库模式和分层.我在哪里申请保安?

我正在尽我所能来设计我的网络应用程序与层之间的良好分离.我正在使用存储库模式,因此有一个SQLObjectRepository,它由我的Web服务调用,由我的Web前端调用.

在我的对象模型中,用户与一个或多个区域相关联,这些区域应该过滤他们应该有权访问的对象.我的问题是,当我查询对象时,是否将代码放在服务中以设置对象的权限,或者该代码是否应该存储在存储库中?如果用户是2个区域的成员,我应该将用户作为参数传递给服务,还是应该将用户的区域传递给服务?

security separation-of-concerns repository-pattern

10
推荐指数
1
解决办法
866
查看次数

当UI组件具有内置功能时,如何将应用程序逻辑与UI分开?

我知道将用户界面代码与域代码分开是很重要的 - 应用程序更容易理解,维护,更改,并且(有时)隔离错误.但这是我的精神障碍......

Delphi附带了可以满足我想要的方法的组件,例如,RichText Memo组件可以让我使用富文本.其他组件,如TMS的字符串网格,不仅可以满足我的需求,而且还为功能付出了额外的代价.这些功能将R放在RAD中.

编写我自己的类来做别人已经为我做过的事情似乎是不合逻辑的.它正在重新发明轮子[曾尝试直接使用富文本?:-)]但是如果我使用这些组件中内置的功能,那么我最终会得到很多混合的UI和域代码 - 我会在其事件处理程序中内置大部分代码.

你是如何处理这个问题的?...或者,如果我想继续使用其他人已经为我编写的代码,您会如何建议我处理该问题?

delphi oop separation-of-concerns

10
推荐指数
1
解决办法
1409
查看次数

结合PHP和HTML的首选方法?

我通过浏览phpBB2来学习PHP ,甚至向他们的数据库提交了一些mod,其他人下载并使用了这些mod.(我不相信phpBB2已经支持了phpBB3这么久了,所以v2 mods数据库不再存在.)

我最喜欢的关于phpBB的一个是他们的模板系统,它让编辑器完全分离HTML和PHP.PHP文件包含PHP:逻辑,数据库查询和激活模板.TPL文件包含模板:HTML,模板变量和专用HTML注释,以允许条件或重复块.

但是,每当我在网上看到某人的PHP代码时,它或者是一个使用单个函数等的小代码片段,或者PHP中充满了包含HTML的字符串(或者更糟糕的是,PHP与PHP散布在一起).phpBB是我看过的唯一一个实际上将语言和标记语言分开的PHP,向我建议很少有其他PHP代码库做这样的事情.

我想再次开始使用一些PHP,但这次它不会是一个phpBB论坛,它将在一个团队中.根据我的经验,PHP和HTML的分离是不常见的(如果我错了,请纠正我!).但是,我已经习惯了那个分界线,我讨厌阅读混合的PHP和HTML.

在PHP编程的"现实世界"中,首选方法是什么:

  • 带有HTML字符串的PHP文件
  • 用PHP块分解的HTML文件
  • PHP和HTML完全分开(我希望?)
  • 别的什么?

html php templates separation-of-concerns

10
推荐指数
2
解决办法
1万
查看次数