所以我在ASP.NET webforms中实现了MVP。
我需要能够根据某些数据的状态更改标签的颜色。
我的第一次尝试:
class Presenter
{
...
_view.IsStatusTrue = true;
}
class View
{
bool IsStatusTrue
{
set
{
if(value)
{
lbl.Text = "Status is true :)";
lbl.CssClass = "trueClass";
}
}
}
}
我的问题:这个逻辑应该在Presenter中吗?
class Presenter
{
...
if(status == true)
{
_view.LblCssClass = "trueClass";
_view.StatusText = "Status is true :)";
}
}
答案 0 :(得分:2)
你的帖子标题确实是自我回答,这是观点责任。我用Java开发了一个家庭宠物MVP框架项目,该框架的核心是独立于平台的,以及我使用该框架的应用程序。这让我有很多目标平台/应用程序视图的实现:Swing(类似于.NET世界的WinForms),GWT(Java到JavaScript基础架构),JSF(~ASPF MVC),Android,JavaFX(~WPF) ),Lanterna(文本模式用户界面)和纯CLI(命令行界面)。想想您的演示者,好像他们都完全独立于平台。从这个角度来看,你的第一个例子比第二个例子好。它给出了什么:
boolean IsSuccessful{ set; }
足以报告状态。如果你揭示它的组件,那么你真的违反了封装。trueClass
不能应用于WinForms,对吧?)。请考虑以下代码:public sealed class CliView
: AbstractCliView, // just an example, it might containt CLI-related stuff
IStatusView {
public boolean IsSuccessful {
set {
Console.ForegroundColor = value ? ConsoleColor.Green : ConsoleColor.Red;
Console.WriteLine(value ? "success" : "FAILURE");
Console.ResetColor();
}
}
}
这是可能的,因为在第一种情况下,您封装如何实现视图,而不是揭示实现细节。如果你想有一天支持音频接口怎么办? :)