问题标签 [architectural-patterns]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 映射时如何避免编写大量重复代码?
我有一个使用实体框架的数据访问层 (DAL),我想使用 Automapper 与上层通信。作为每个方法的第一个操作,我必须将数据传输对象 (DTO) 映射到实体,处理我的输入,然后继续从实体映射到 DTO。你会怎么做才能跳过编写这段代码?
例如,请参见:
asp.net-mvc-2 - Web 应用程序:允许超级用户模拟其他用户 - 有没有设计模式?
- 在我的网络应用程序中,我想允许超级用户模拟其他用户。
我的问题:
是否有一种普遍接受的设计模式可以用来实现这一点?
- 一般来说,我可以想象我需要在会话中跟踪当前用户和模拟用户。
但是您可以理解,我想尽量减少与此更改相关的复杂性。
顺便说一句,我的应用程序是一个 ASP.NET MVC 2 应用程序,所以如果我可以利用任何现有的基础设施,那就太好了。
编辑:我正在使用表单身份验证。
编辑:我还需要跟踪超级用户代表另一个用户行事的事实。我需要这样做有两个原因:
- 日志记录应该记录一个超级用户代表另一个用户行事的事实。
- 可以想象,超级用户想要返回模拟屏幕以“切换上下文”并模拟另一个用户。
编辑: @Jordão 提出了一个最可行的解决方案。我唯一关心的是以下问题 - 如果超级用户(在模拟其他用户时)导航到主屏幕,并且屏幕顶部显示“Hello [User]”,我希望它说“Hello [Impersonated User]”为反对“你好[超级用户]”。而且我担心@Jordão 的解决方案会使这个屏幕和其他具有类似要求的屏幕的实现更加复杂。
.net - 接口困境的位置
给定一个代码项目,它应该通过实现松散耦合的层、具有 IoC 容器等来遵守 SoC 原则,例如,一个简单的 ASP.NET MVC 解决方案,它分为以下程序集:
- 应用程序集+命名空间
- 模型组件+命名空间(包含访问数据库数据的具体存储库)
以及模型程序集中的具体存储库必须在哪里实现一个通用接口IMyBusinessRepository
,你会将那个接口放在哪个程序集中?
1) 如果您将该接口放入模型程序集中,那么如果不修改应用程序程序集的代码,就不可能用另一个程序集替换该程序集(至少如果它具有不同的命名空间)。此外,驻留在不同程序集中的替代 IMyBusinessRepository
实现必须引用原始程序集(Argh!)
2)如果你把它放在Application程序集中,如果不引用Application程序集,就不可能在其他项目中使用Model程序集(Argh!)
3) 或者您会为该接口创建一个单独的通用程序集,并且就此而言,为每个通用接口或一组接口创建一个单独的通用程序集?(啊?)
总而言之,X组件应该可以在应用程序A中轻松替换(仅通过更改引用),并且可以在应用程序B、C、D中重用。
wcf - 项目的命名约定仅包含 WCF 服务引用?
假设我们有一个后端需要使用某种 Web 服务与 N 个外部系统通信。
我要做的是:创建一个单独的项目并在那里生成代理类(在 WCF 服务参考对话框中使用服务的 WSDL)。
关于项目名称后缀:
我首先虽然 XxAdapter。但是后来,我开始创建具有额外逻辑的类,例如 CircuitBreakers,所以我最终使用了 XxAgent(来自 ServiceAgent)。
此类项目名称的“正确”后缀应该是什么。
design-patterns - 设计模式(S)命令或工厂哪个更好实施?
我们也可以通过实现工厂模式和命令模式来解决一些设计问题。那么,根据性能,哪个更好呢?
java - 用于通过网络发送对象、保存指针的模式/库
假设您有一个想要共享/同步相同模型/对象的客户端和服务器。模型相互指向,并且您希望它们在客户端和服务器之间发送/序列化后继续指向同一个对象。我目前的解决方案大致如下:
但我对这个解决方案不太满意,字段是整数之类的。这也应该是一个很常见的问题。所以我在这里寻找的是这个问题的名称、模式、通用解决方案或库/框架。
model-view-controller - MVCS - 模型视图控制器服务
我已经使用 MVC 很长时间了,听说过“服务”层(例如在 Java Web 项目中),我一直想知道这是否是一种真正的架构模式,因为我找不到很多关于它。
MVCS 的想法是在控制器和模型之间有一个服务层,以封装所有可能在控制器中的业务逻辑。这样,控制器就在那里转发和控制执行。并且您可以在许多控制器(例如,网站和 Web 服务)中调用服务,而无需重复代码。
theory - Model-View-Presenter 中的 Presenter 是否创建视图?
在 MVP 中如何创建视图?演示者是否总是创建它们(除了在子视图的情况下查看)?或者它是一个单独的第三方组件或应用程序或创建它们的东西?
我们还要补充一点,我可能会在 Dojo Toolkit/ExtJS(即 JavaScript)上执行此操作。
所以,我有这些代码行:
两条线到底应该去哪里?演示者是否实例化视图,反之亦然?什么实例化了第一个实例?
design-patterns - Active Records vs. Repository - 优点和缺点?
使用 ActiveRecord 你可以定义一个像这样的类:
虽然这很好而且很简单,但我发现我的课程变得非常臃肿,逻辑混杂在一起!
使用分层/域设计,您可以定义相同的类,如:
它是如何从 Active Record => 分层设计迁移而来的?
- Name setter => 中的实体级别验证仍然存在(通过 DataAnnotation 实现)
- 业务逻辑/规则验证(唯一名称)=> 从实体移动到新的单独 ContactValidator
- 保存逻辑 => 移至单独的存储库模式类(也带有 UnitOfWork)
- 加载逻辑 => 移动到单独的存储库
- 与存储库的交互是通过一个新的 ContactService(它将强制使用 ContactValidator、ContactRepository、UnitOfWork 等 - 反对让调用者与 ContactRepository 松散!)。
我正在为这种分层设计寻找同行的认可/建议——我通常不会在 Active Record 类型之外进行设计!任何评论表示赞赏。
注意 - 这个例子是故意简单的(UnitOfWork 并没有真正使用,并且新的 Repository/Validator 将被不同地处理)。
c# - 当我只希望某些派生类可以访问基类中的方法时,使用什么设计模式?
我在这里有一个独特的问题/情况。试图让它尽可能简单。我有一个基类(比如Parent)和一大堆直接从基类(Parent)派生的派生类(比如Child1,Child2 ..ChildN)。我想更改基类并添加一个“AVeryPrivilegedMethod”,它只能由 Child2 和 Child3 访问,而不能被任何其他孩子访问(或使其可配置,以便将来 Child5 也可以在将来使用它,只需进行最小的更改)。什么样的设计模式/架构模式适合这个法案?
使用的语言 - C#。
PS:我正在考虑使用InternalVisibleTo但意识到这会在装配级别应用