我正在一个新项目工作,我想实现MVP模式.有一个使用这种模式的winforms框架?我检查了CAB,但我的项目实现起来并不复杂,我搜索更简单的实现和使用的东西.
谢谢!
我正在开发一个Android应用程序,我必须在运行时请求权限.我想知道使用Model-View-Presenter架构实现它的最佳方法.
我最初的想法是让演示者调用负责权限的组件(例如a PermissionHandler),并相应地更新视图.
问题是检查权限的代码与Activity类紧密结合.以下是一些需要Activity或Context的方法:
ContextCompat.checkSelfPermission()ActivityCompat.shouldShowRequestPermissionRationale()ActivityCompat.requestPermissions()onRequestPermissionsResult()(打回来)这意味着我必须将一个活动对象传递给演示者,我不太喜欢,因为我听说让演示者免于Android代码是有利于测试的.
因此,我考虑在视图级别(在一个活动中)处理权限,但是我想这会损害使视图仅负责UI更新的目的,没有业务逻辑.
我不确定什么是最好的方法来解决保持代码尽可能分离和可维护的问题.有任何想法吗?
在Microsoft .NET Architecting Applications for the Enterprise一书中的第374页上,有一个关于表示层模式演变及其对平台影响的图表(图7-14).
除了展示从最初的MVC模式到更现代的变体的演变之外,该图表还显示以下现代模式可以应用于以下技术:
注意:最近没有出现在另一个最近感兴趣的模式是Presenter First(MVP),它被设想为更加适应TDD.
根据我的理解,如果使用WPF开发,那么MVVM模式是事实上的选择(类似于Model2用于Web开发).也就是说,似乎没有什么能阻止人们在WPF应用程序中使用Passive View,Supervising Controller或Presenter First.这种方法会导致应用程序无法真正关心前端是WPF,WinForms还是Web.看来这些MVP变体允许更大的灵活性.
但是,针对UI平台无关的灵活性(可能不需要)的目的是使WPF开发变得更加困难并且失去WPF提供的部分功能/功能吗?这么多,成本超过了收益?
换句话说,MVVM是如此之大,以至于人们不应该考虑WPF应用程序中的其他替代方案?
假设我使用基于视图的方法来开发Android应用程序,例如以下文章中描述的内容:http://corner.squareup.com/2014/10/advocating-against-android-fragments.html
所以现在我有两个全屏视图.一个是可见的,包含一个图像网格.另一个是隐藏的,是待点击图像的详细视图.如果在单击网格中的图像时没有转换,则将隐藏网格视图并显示详细视图.现在,如果我想要一些类似于网格视图中的小图像和详细视图中的较大图像之间的共享元素过渡的内容.这样的事情可能吗?
.gif)
我目前正在从UI编写ASP.Net应用程序.我正在实施一个MVP架构,因为我厌倦了Winforms,并希望能够更好地分离关注点.
因此,使用MVP,Presenter处理由View引发的事件.这是我用来处理用户创建的一些代码:
public class CreateMemberPresenter
{
private ICreateMemberView view;
private IMemberTasks tasks;
public CreateMemberPresenter(ICreateMemberView view)
: this(view, new StubMemberTasks())
{
}
public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks)
{
this.view = view;
this.tasks = tasks;
HookupEventHandlersTo(view);
}
private void HookupEventHandlersTo(ICreateMemberView view)
{
view.CreateMember += delegate { CreateMember(); };
}
private void CreateMember()
{
if (!view.IsValid)
return;
try
{
int newUserId;
tasks.CreateMember(view.NewMember, out newUserId);
view.NewUserCode = newUserId;
view.Notify(new NotificationDTO() { Type = NotificationType.Success });
}
catch(Exception e)
{
this.LogA().Message(string.Format("Error Creating User: {0}", e.Message)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MVP模式,我遇到了一个设计问题.我正在开发一个具有多个UserControl的应用程序.UserControls本身彼此无关,只代表实际模型的子集.根据我的阅读,人们倾向于说每个视图应该使用一个Presenter.这似乎有道理,但如果我有30个UserControls,我真的想要30个演示者吗?另一方面,如果我有1个Presenter和1个View代表整个"应用程序"视图,那么我将拥有膨胀的View和Presenter界面.然后每个View都必须实现与它无关的方法.我的问题是,有没有更好的方法来处理多个UserControls,或者我应该为每个View创建一个Presenter?
我正在阅读本周末的ASP.net MVP模式,看起来即使是最简单的任务也需要花费太多精力,如果在MVP模式中付出似乎是在更大的项目,但我想我是不是要跟随MVP.为什么不在ASP.net MVC中执行该项目?
我正在考虑MVP模式的原因是因为我已经注意到在我的所有ASP.net Webform项目中,如果我在Web上有很多服务器控件,那么代码背后会有大量代码用于事件处理形式所以我正在寻找减少这种情况的方法并遇到MVP模式.
是否值得努力遵循MVP模式或只是切换到ASP.net MVC?
您最喜欢的GWT MVP框架是什么,以及您选择的原因?
谢谢.
更新:在列表中添加了建议3,4,5.
更新2:在列表中添加了guit.
我目前正在使用MVP Pattern开发一个Android应用程序.
当我尝试开发一个Activity时,我应该使用ListView.所以我正在使用Adapter for ListView.但我听说适配器类似于MVP模式上的Presenter.
我想如果Apdater对Presenter很熟悉,那么我应该让Presenter更新ListView而不是Adapter.
遇到这种情况时,如何开发ListView?只需使用适配器并继续使用MVP模式?
谢谢你的阅读.
我有一个接收网络连接事件的BroadcastReceiver实现.它在AndroidManifest.xml中声明,并在网络事件发生时由Android自动调用.
广播接收器:
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "action: " + intent.getAction());
Log.v(TAG, "component: " + intent.getComponent());
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
...
<receiver
android:name=".ConnectivityChangeReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我想在这里为我的应用程序使用Google的MVP示例架构:
https://github.com/googlesamples/android-architecture/tree/todo-mvp/
使用上面的架构,只是想知道:
我的BroadcastReceiver应放在哪里?
如果我的BroadcastReceiver需要写入数据库,那么最好的方法是什么?
如果我的BroadcastReceiver需要更新UI,那么最好的方法是什么?