问题标签 [facade]
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.
design-patterns - 在外观类之外创建一个对象,它会破坏外观模式吗?
在 HomeCADEngine 外观类中,我有一个方法“addRoom(room:Room)”,它会将这个房间添加到 ArrayList。但是,当我们在外观类之外创建一个房间然后将其传递给 addRom() 方法时,它是否打破了外观模式?
design-patterns - 最佳设计模式:适配器或外观
我无法决定哪种模式最适合以下问题。
我有一个客户端系统,它将与一个单独的子系统进行交互。子系统相当复杂,所以我需要两者之间的接口来简化客户端系统。这听起来非常适合 Facade 模式,但我认为 Adapter 模式也适合我的问题。
如果中间的接口通过简单的 API 调用调用子系统上的各个任务,有什么区别吗?
nhibernate - 如何通过外观层设置 NHibernate Linq 获取策略
我使用 NHibernate 进行数据访问,但通过外观层访问它。该层由存储库的接口以及对应于 ISession 对象的 IUnitOfWork 接口组成。
为了正确管理检索到的实体,存储库在其构造函数中传递了一个 IUnitOfWork,并且 IUnitOfWork 用于加载。
IUnitOfWork 包含一个名为 All 的属性,它将类的所有实体作为 IQueryable 检索(用于以后过滤)。因此,检索今年创建的所有实体的存储库方法可能如下所示:
注意:这不是这些接口和类的完整代码!只有与我的问题相关的代码。
IUnitOfWork 接口:
UnitOfWork 具体类:
IFooRepository 接口
FooRepository 具体类
我想添加功能来指定获取策略,以便可以急切地加载相关实体。假设 Foo 有一个对应于另一个实体 Bar 的属性:
映射文件指定 Bar 是延迟加载的,但在我的 ThisYearsFoos 存储库属性中,我想指定 Bar 应立即加载以避免 N+1 选择。
在 Linq to NHibernate 中,我们可以使用 Expand() 扩展方法指定预取。但是这个扩展方法属于NHibernateQueryable类型,而IUnitOfWork接口的GetList方法只知道IQueryable。
显然,我不希望 IUnitOfWork 接口知道 INHibernateQueryable,因为它应该不知道 NHibernate。
使用我上面指定的设计,有没有我想不到的方法来做到这一点?还是我的设计需要重新思考?
谢谢
大卫
design-patterns - 外观、代理、适配器和装饰器设计模式之间的区别?
Facade、Proxy、Adapter和Decorator设计模式有什么区别?
从通用的角度来看,这样的模式似乎在做同样的事情,那就是:包装一个 API 并提供对它的访问。
如何区分这些模式?
如何辨别一种模式何时比其他模式更适合?
java - 具有 3 种模式的 Java 客户端/服务器应用程序
我是一名大学生,我必须在月底之前完成以下任务......我必须用java编写一个实现3种模式的客户端/服务器应用程序:好莱坞原则,外观模式和模板方法模式......它必须至少有3-4 个域对象......数据库必须是 MS Access(我知道,我知道......)我应该查看的任何建议或资源,一些类似的工作,因为我不知道从哪里开始? 我正在考虑制作图书馆应用程序。我很感兴趣你会使用什么域对象以及你将如何开始......
model-view-controller - ASP.NET MVC 应用程序中的 IRepository、IService、Unity,参考问题
我是 Unity 的新手,但这个问题对 IoC 来说更通用,而且我对整体实现 IoC 还是很陌生。我有这个项目结构的VS2010解决方案(稍微简化):
- 业务对象 - 文件夹
- DomainModel (Class Lib prj.) – Entity Framework 2 POCO 实体
- 数据层 - 文件夹
- DataAccess (Class Lib prj.) – EF2 EDMX
- Repository (Class Lib prj.) – IRepository 接口和存储库具体实现
- 表示层 - 文件夹
- WebUI – MVC 项目
- 服务层
- Service (Class Lib prj.) – IService 接口和服务(外观模式)具体实现
所有项目都引用 DomainModel 项目。
存储库引用 DataAccess 项目。
服务层引用存储库项目。
WebUI 引用服务项目和 Unity 程序集。
我已将 Unity 配置为在 WebUI 中正确注入我的所有服务类型(通过自定义 UnityControllerFactory.cs 的 global.asax)。但是如何在服务层配置 Unity 以注入存储库对象?
我不想从 WebUI 中引用 Repository 项目,以确保在开发过程中没有任何快捷方式并绕过服务层。
我有几个想法(不确定它是否会解决它):
- 将 IRepository 接口移动到 DomainModel 并为 IRepository 添加 Unity.RegisterType<> 调用
- 在 Web.config 中设置 Unity 配置
任何方向都将不胜感激,特别是如何为服务层/存储库配置 Unity,以及关于项目的一般情况。
design-patterns - 编程设计模式:门面与否?
我们团队中的另一个人为我提供了一个库作为他的 web 框架的 jar。我们称这个框架为“我朋友的框架”。
我需要他的框架中的一个特定类。该类公开的一半属性是我自己的应用程序真正需要的。另一半不需要。要检索此类的属性,您需要进行一些字符串操作。因为我将在这个类之上开发自己的框架,所以我想尽可能多地解耦依赖。也许将来我的另一个朋友会开发一个更好的框架。
所以我所做的是为该类生成了一个外观类。我自己的框架通过我的外观类访问属性。如果“我朋友的框架”确实改变了,我只需要改变一个外观类,其余的保持不变。此外,字符串操作是在外观类内部完成的。此外,外观类仅公开所需的属性。所以我自己的框架只是作为普通的 getter/setter 访问属性。
然而,我和这个人发生了争执。他强迫我直接使用他的课程,因为首先他永远不会改变他的课程的实现。所以他告诉我写一个门面类真的没有任何价值。但我不同意。
我错了吗?我相信我是对的。
design-patterns - 外观和网关设计模式有什么区别?
或门面==网关?
java - 我的门面中的空指针:(
我已经写了一个任务管理器,而且它很长。顺便说一句,所有这些都是用 Java 编写的。所以我写了一个外观,你可以在下面看到 HashMap 存在问题,我怀疑我在构建过程中尝试添加到 HashMap 中的值不太顺利。触发空指针异常的方法是 create 方法。该方法的输入参数已经过我和我信任的调试器的验证。
这里的任何帮助都会很棒......我确定我忘了提及一些事情,所以我会尽快回复评论,因为我现在需要完成这件事。
jakarta-ee - 如何拆分 SFSB Facade?
我在开发基于 EJB 3 技术的应用程序时遇到了一些问题。
我想在会话 bean 中使用外观模式来将我的客户端(Web 应用程序)与我的实体 bean 分离。
我正在使用 SFSB 来管理用户会话。
所以我有一个FacadeLoginRemote
远程接口,它向客户端公开方法doLogin()
,doLogout()
等...目前这个 SFSB 还包括一些其他方法,例如getCourse(int id)
,getResource(int id)
。并非所有用户都能真正获得课程并获得资源,因此 Facade 在将值返回给客户端之前会执行一些检查。
我想拆分外观,将方法getCourse()
放在getResource()
一个特殊的类中,但留给FacadeLoginRemote
检查用户权限的功能。
如果我制作一些不同的 SLSB,我会将它们公开给客户。因此,客户端将有可能直接连接到它们,避免来自FacadeLoginRemote
.
我错了吗?有没有办法做到这一点?
提前致谢,
安德烈亚