我在wpf上下文中有两个菜单项,我用命令绑定它们,当两个项目都不可用时如何隐藏上下文菜单,我的意思是两个命令都无法执行?
我正在为一家公司开发一个项目,该公司找到供应商为员工搬迁提供服务.这些服务的东西,搬运工没有专门做,如准备钢琴或过境或建造板条箱贵重物品.
在此域中,订单具有1:多个位置.
在移动行业中,订单经常不断变化,直到供应商执行他所要求的服务为止.因此,在我们的模型中,我们有一些适用于订单和位置的状态(例如,已提交,已取消,已暂停).
这里有一些非常简单的业务规则.这是一个抽样:
等等.根据这些规则,我觉得这形成了一个聚合根边界.因此,我有一个MyClient.Statuses.Order聚合,其中Statuses是上下文/服务的名称/您想要调用它的任何内容:
public class Order {
private Guid _id;
private OrderStatus _status;
public void PlaceOnHold() {
if (_status == OrderStatus.Cancelled)
// throw exception
_status = OrderStatus.OnHold;
Locations.ForEach(loc => loc.PlaceOnHold());
}
public void PlaceLocationOnHold(Guid id) {
if (_status == OrderStatus.Cancelled)
// throw exception
Locations.Single(loc => loc.Id == id).PlaceOnHold();
}
// etc...
private Location[] Locations;
}
internal class Location {
public Guid Id;
public LocationStatus Status;
public void PlaceOnHold() {
// It's ok …Run Code Online (Sandbox Code Playgroud) 我正在学习一个新的(小)项目的MVVM模式,我有一个关于在我们的控制器上调用动作的方法的问题:
我看到很多教程他们告诉我们使用Command,暗示声明一个RelayCommand,初始化它并创建RelayCommand调用的动作.
在另一方面,我有一位同事告诉我,我可以使用CallMethodAction触发器:
<i:Interaction.Triggers>
<i:EventTrigger>
<ei:CallMethodAction MethodName="Init" TargetObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
对我来说,他的方法的优点是我不必为命令制作一些inits方法(可能永远不会使用).
那我错过了什么?为什么每个人都使用命令?
我确信有更多OO方式可以做到这一点,但我不确定如何.我有不同的"报告"对象(例如Report1,Report2,Report3等).我有一个服务对象,它将这些报表对象作为方法中的两个参数.在方法中,我有一个大的if else块语句,用于确定哪两个报表对象已传递给方法.这个逻辑似乎不是OO,没有更好的方法来确定我传入哪两个报告,然后为这两个报告提供正确的逻辑,所以我没有一个if-else块,螺旋式的控制并最终长达100多行?命令模式在这里运作良好还是有更好的东西更加以对象为中心?
Report1 r1 = new Report1();
Report2 r2 = new Report2();
Report3 r3 = new Report3();
Report4 r4 = new Report4();
etc...
SomeServiceObject serviceObj = new SomeServiceObject();
var returnedData1 = serviceObj.GetReportLogic(r1, r2);
var returnedData2 = serviceObj.GetReportLogic(r1, r3);
var returnedData3 = serviceObj.GetReportLogic(r3, r4);
etc..
public GetReportLogic(object someReport1, object someReport2)
{
if ((someReport1 as Report1) and (someReport2 as Report1))
{
DoSomething();
}
else if ((someReport1 as Report1) and (someReport2 as Report2))
{
DoSomethingElse();
}
else if ((someReport1 as Report1) and (someReport2 …Run Code Online (Sandbox Code Playgroud) 所以,我正在使用 Swing 库开发一个程序,我显然有按钮和菜单项。其中一些应该做同样的事情,我认为使用命令模式应该是这样做的方式,例如我有一个“保存”按钮和一个“保存”菜单项,他们必须实现相同的保存算法. 命令模式似乎没问题,但我不知道谁是接收者。难道一个命令不应该在一个实现某种“接收器接口”的对象上工作,这样你就可以在不同的接收器上使用不同的命令来任意耦合它们吗?看起来我的模式实现中没有“接收器”。我的另一个疑问是是否应该将命令实现为单例,
谢谢你。
这应该很容易,
我试图提出一个命令类的名称,该命令类是其他命令的集合.运行master命令时,将运行所有子命令.
任何理想?
我希望在分布式客户端/服务器环境中使用命令模式.本质上,接收器的"执行"方法需要采用各种参数,但是我读到每个命令类都应该有一个统一的"执行"方法,该方法不应该揭示接收器的底层功能.
我的问题是,如何通过命令类将调用参数从交换机传递到不同的接收器?有没有人有一个简单的Java示例?我似乎找不到任何东西
谢谢你的帮助.
我编写了一个Java程序,它读入一个包含要执行的命令的文件(用我自己编写的语言).命令以字符串形式读入并放入数组中.现在,"调度程序" - 方法将循环遍历数组,解释命令并调用将对其执行操作的相应方法.
这当然导致了一大堆嵌套的if语句:
if commandReadIn == this, do that...
if commandReadIn is of type x, get next element,treat next element as argument...
etc.
Run Code Online (Sandbox Code Playgroud)
现在我只有一些命令,但如果我想添加数百个呢?代码将变得无法维护.
现在我想知道是否可以完全摆脱条件逻辑.这里的命令模式似乎没什么用,因为我不得不在某个时候解释字符串..这意味着很多嵌套的"if".如果不可能,那么以一种能够轻松添加,编辑或删除命令的方式重构命令及其语法的最佳方法是什么?
我试图了解如何在我的java servlet中实现'命令设计'.这是servlet的一个例子:
protected void processRequest(HttpServletRequest ...) {
String action = request.getParameter("action");
String destination = null;
} if (action.equals("Home"))
destination = "Home";
} else if (action.equals("Add")) {
String var = request...
try {
db.add(var);
} (DatabaseException e) {
request.setAttribute("errorMessage", e.getMessage());
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
我理解的是每个if语句都应该转换为一个单独的类,其中包含一个处理例如添加对象的执行函数.我不明白的是请求是如何处理的,它们是在execute函数中处理还是从那里返回到Servlet/JSP(我的catched错误放在请求中并在我的JSP文件中使用)?
我希望有人可以给我一个基本结构,并告诉我如何开始实现它.
我需要在求职面试中创建客户端 - 服务器程序,其中客户端发送命令并且服务器处理它们.
服务器需要能够轻松更改,这意味着以后可能会有更多的命令类型.
所以我使用Strategy实现它,这意味着类处理命令看起来类似于:
public class ServerProcessor
{
Dictionary<string, Action<string>> commandsType;
public ServerProcessor()
{
commandsType = new Dictionary<string, Action<string>>();
}
public void RegisterCommand(string commandName, Action<string> command)
{
commandsType.Add(commandName, command);
}
public void Process(string commandName, string vars)
{
if (commandsType.ContainsKey(commandName))
{
commandsType[commandName].Invoke(vars);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我这样做之后,面试官说我需要使用Command模式实现它,但没有说明原因.
Command模式将是这样的:
public interface ICommand
{
void Execute(string vars);
string GetName();
}
public class ServerProcessor2
{
List<ICommand> commandsType;
public ServerProcessor2()
{
commandsType = new List<ICommand>();
}
public void RegisterCommand(ICommand commandName)
{
commandsType.Add(commandName);
}
public void …Run Code Online (Sandbox Code Playgroud)