是否真的不可能在jar文件中隐藏某些类?
我希望不允许直接实例化类以使其更灵活.这个罐子里只能看到工厂(或立面).
除了创建两个项目之外,还有其他办法解决这个问题吗?(两个项目:第一个包含类(实现),另一个引用第一个并包含工厂;后面只引用第二个)
据我所知,Facade Pattern的意图是
提供一个统一的接口到组接口在一个子系统.Facade定义了一个更高级别的接口,使子系统更易于使用.这可以用于将许多复杂的对象交互简化为单个界面.

根据我的理解,模式的目标是隐藏子系统中的复杂性(例如,您的外观类调用子系统中的许多对象).
但是在Laravel的Facade中,它只有一个类调用另一个类(不是子系统).对我来说,它看起来更像是一个Proxy超过Facade.有人可以帮我澄清这一点.
我对模式有疑问.我的设计模式确实存在问题.你能告诉我Facade Pattern和Builder,Factory和Abstract Factory模式之间的区别吗?
我有下面这段代码,作为一个例子,dec_proxy尝试将增量运算符的效果反转到在复杂函数调用foo中执行的类型 - 顺便说一下我无法更改接口.
#include <iostream>
template<typename T>
class dec_proxy
{
public:
dec_proxy(T& t)
:t_(t)
{}
dec_proxy<T>& operator++()
{
--t_;
return *this;
}
private:
T& t_;
};
template<typename T, typename S, typename R>
void foo(T& t, S& s, R& r)
{
++t;
++s;
++r;
}
int main()
{
int i = 0;
double j = 0;
short k = 0;
dec_proxy<int> dp1(i);
dec_proxy<double> dp2(j);
dec_proxy<short> dp3(k);
foo(dp1,dp2,dp3);
//foo(dec_proxy<int>(i), <---- Gives an error
// dec_proxy<double>(j), <---- Gives an error
// dec_proxy<short>(k)); <---- …Run Code Online (Sandbox Code Playgroud) SessionFaçade核心J2EE模式的优点和缺点是什么?
它背后的假设是什么?
这些假设在特定环境中是否有效?
我在工作中遇到了以下问题,而且我没有经验或知识来回答它们,我希望你们中的一些人能够指出我正确的方向,任何答案将不胜感激!
脚本
我们有两个方面的业务使用单独的数据库,人力资源和业务领域(家庭护理).
人力资源部门跟踪公司的员工,轮班模式,缺勤,薪酬等.Homecare会跟踪客户信息,家访,访问日期以及负责提供访问的员工.
这两个系统是分开的,我们目前正在寻找集成它们的方法.
此外,我们正在研究如何将查看这两个数据库的代码组织成可重用,有组织的库.
我们有三个应用程序重用HumanResources.dll,负责与库中包含的EF 4对象上下文进行通信.对象上下文几乎是数据库的镜像.
问题
我们即将添加第四个将使用HR数据库中的数据的应用程序.
我们要不要:
创建一个新的EF数据模型,负责提供只有应用程序需要的信息,同时复制一些常见的实体,如Employee.
要么
将新实体/表添加到已经很大的模型中并接受它将变大.
从长远来看,我们需要将人力资源数据库中的班次模式信息加入第5个应用程序中的操作区域(家庭护理)数据库中的客户访问.
我们已经了解了我们能做些什么; 我们提出以下建议:
创建一个位于HumanResources对象上下文和Homecare对象上下文之间的层,负责将两组数据连接在一起.
还有其他方法可以使我们受益吗?
architecture integration database-design facade entity-framework-4
我问自己,外观模式是否违反了 SOLID 原则,以及模式本身是否是反模式。
更新
我的意见:
违反了OCP,因为你会在facade中添加更多的方法
LSP / ISP被违反,因为消费者/客户端有依赖,会有太多客户端不需要的方法。
DIP,在我看来,只要接口本身只公开抽象或 DTO,就不会被违反。
SOLID一般是我约的意见小,稳定,从而组合的接口。
一个门面往往是相反的大和不稳定。
我试图了解 slf4j 的细节。我仍然不清楚如何将 slf4j 视为 Logging 门面?
门面的目的通常是 -
为子系统中的一组接口提供统一的接口。Facade 定义了一个更高级别的接口,使子系统更易于使用。
在 slf4j 的情况下,它提供了一个通用Logger接口,但每个绑定项目(如log4j, logback等)都需要提供它们的具体实现。
所以我理解如何adapter pattern适应,但我仍然无法理解如何Facade Pattern使用。
我怎么知道在我的应用程序开发中需要一个外观模式?
如何在Facade Pattern和Template Pattern之间画线?
例如:在[this]文章中,我们看到,int placeOrder(int CustomerID, List<BasketItem> Products)算法中有许多预定义的步骤.那么作者为什么不在这里使用模板模式呢?
看了几个关于外墙和laravel 4的教程...尝试了一些......不喜欢他们工作的方式.
例如,他们并不都提供了一种定义外观文件和服务提供商存储位置的方法......我试图远离那个并让我的头撞到几个墙,直到我决定做这个线程.
所以:假设我有一个名为Laracms(laravel cms)的应用程序.
我想将我创建的所有内容 - 外墙,服务提供商等存储在名为laracms的app下的文件夹中.
所以我有/ app/laracms/facades,/ app/laracms/serviceproviders等等.我不想将外观与数据库模型混合在一起,我希望尽可能将内容保持分离.
在我的例子中,现在让我们看一下外观的设置名称(我希望实现一个设置类,用于视图和管理员来设置misc.的东西).
Settings :: get(),Settings :: set()作为方法.
任何人都可以解释如何正确设置外墙?我不知道我做错了什么,我需要一个新的开始.
谢谢,克里斯
寻找一步一步的简单解释如何以及为什么.