我发现编写Web应用程序和WinForm应用程序通常比编写控制台应用程序时要清晰得多。
清洁工是什么意思?事实上,UI(即readline / writeline)与逻辑代码交织在一起的事实变得非常糟糕,事实上它不是事件驱动的,这意味着很难获得良好的抽象。
我正在考虑这个问题,MVC确实尝试解决网络应用程序的类似问题,所以我的问题是控制台应用程序有类似的问题吗?或任何指南,以更好地设计到控制台应用程序?
答案 0 :(得分:10)
我认为你会发现模型视图控制器的一个流行替代品是Model-View-Presenter。两者之间的模型基本相同。控制器和视图的角色非常类似,但根据您的实现,它们可能会承担更多责任。在MVP中,有两种实现方法:监督控制器和被动视图。 MVP通常被认为是WinForms客户端的标准体系结构,也可以应用于WebForms。以下是一些相关链接以获取更多信息:
最后,如果你想拿一本书,C#中的敏捷原则,模式和实践包含一个很好的演练,用于构建基于控制台的工资单应用程序。一旦获得竞争,他们将构建到WinForms UI,以展示他们的应用程序架构如何允许他们轻松添加新视图。
答案 1 :(得分:4)
MVC for console应用程序示例:
public interface IController
{
void RequestView(IView view);
IView ResponseView();
}
public interface IView
{
int GetID { set; get; }
void DisplayId();
}
public interface IModel
{
int GenrateID(int id);
}
//Business logic in Model
public class Model : IModel
{
public int GenrateID(int id)
{
id = id * 10;
return id;
}
}
//Event Logic in Controller
public class Controller : IController
{
private IModel model;
private IView responseView;
public Controller()
{
responseView = new View();
}
public void RequestView(IView view)
{
model = new Model();
responseView.GetID = model.GenrateID(view.GetID);
}
public IView ResponseView()
{
return responseView;
}
}
//Display Logic in View
public class View : IView
{
public int GetID
{
get;set;
}
public void DisplayId()
{
Console.Write(GetID);
}
}
class Program
{
static void Main(string[] args)
{
IController ctr = new Controller();
int input =int.Parse(args[0]);
IView view=new View()
{
GetID = input
};
ctr.RequestView(view);
view =ctr.ResponseView();
view.DisplayId();
}
}
答案 2 :(得分:0)
模型视图控件是一种设计模式,因此适用于Web应用程序和控制台应用程序。也许您应该问一个问题如何将MVC应用到您的控制台应用程序。
此致
答案 3 :(得分:0)
我认为你仍然可以将MVC用于控制台应用程序。
请记住,在Web应用程序和WinForms中,很多交互都是从您身上抽象出来的,但仍然存在于视图逻辑中,例如:单击选项卡时要显示的元素。
这是您必须在控制台应用中自行编码的那种交互,但没有理由不能完全在视图的代码中完成。
我对MVC的看法是视图完全负责显示正确的数据,选项等。从这个角度来看,视图中有逻辑并不是犯罪,只要该逻辑仅与如何相关显示的东西。
当然,将视图拆分为不同的类可能会使事情变得更容易(例如,您可以将视图代码本身拆分为MVC模式,尽管使用IAppView,IAppViewController,IAppViewView等实体可能会很快变得复杂,你明白了:))。