标签: mvp

MVP事件或财产

我在Windows窗体应用程序中使用MVP模式.我需要更改视图上的单选按钮.我可以通过在视图上公开一个布尔属性来做到这一点,但是我应该使用事件来操纵视图吗?

.net mvp

1
推荐指数
1
解决办法
1601
查看次数

Model View Presenter是使asp.net UI可测试的正确选择吗?

我已经阅读了很多关于MVP模式的文章.有些人说这太复杂了,有人说它已经过时了.然而对我来说,它似乎是提供单元测试访问UI的完美方式 - 这是我的目标.

你有没有使用过MVP,如果有的话你怎么看?

asp.net mvp unit-testing

1
推荐指数
1
解决办法
507
查看次数

GWTP与GWT MVP和活动/场所的关系

GWT的理解是它首先发布了活动和场所的概念,以支持UI作为状态机的想法,其中每个状态是UI的可书籍配置.

我的理解是GWT后来发布了他们的建议,用MVP架构模式构建GWT应用程序,以便更好地分离关注点和更容易的单元测试.

但是,当你有下载示例应用程序,真正看看源代码,虽然这两个观念培育有client,servershared封装结构,其内部运行基于不同的理念和不同的核心类型.基本上,似乎你必须在一个或另一个之间做出选择(这是真的吗?).

现在我看到GWTP(GWT平台).这看起来像是活动/地方范例以及MVP设计的完美结合.所以我问:如果我选择使用GWTP,那么在活动/地方或MVP领域有什么我会错过的吗?换句话说,通过使用GWTP,我限制自己并被禁止使用这两个项目中的任何最佳实践或组件?提前致谢!

java mvp gwt gwt-activities gwtp

1
推荐指数
1
解决办法
1307
查看次数

如何从MVP模式中的演示者中删除处理程序

我正在GWT应用程序中实现MVP模式.在每个历史记录标记更改时,我正在初始化演示者以获取相应的视图.如果用户导航到单个视图GridView(比如说)2次,那么相应的演示者GridViewPresenter(说)初始化2次(根据MVP模式.如果我们不将演示者作为singelton).喜欢

 Presenter presenter = new GridViewPresenter();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,此演示者中的所有事件都将注册并收听2次.如果不让我们的主持人singelton,我们怎么能避免这种情况.

mvp gwt

1
推荐指数
1
解决办法
585
查看次数

DAL中的异常处理

在MVP winforms应用程序中,我在DAL中处理如下异常.

由于用户消息传递不是DAL的责任,我想将其移到我的Presentation类中.

你能告诉我一个标准的方法吗?

    public bool InsertAccount(IBankAccount ba)
    {
        string selectStatement = @"IF NOT EXISTS (SELECT ac_no FROM BankAccount WHERE ac_no=@ac_no) BEGIN INSERT INTO BankAccount ...";

        using (SqlConnection sqlConnection = new SqlConnection(db.ConnectionString))
        {
            using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection))
            {
                try
                {
                    sqlConnection.Open();
                    sqlCommand.Parameters.Add("@ac_no", SqlDbType.Char).Value = ba.AccountNumber;
                    //
                    //

                    sqlCommand.ExecuteNonQuery();
                    return true;
                }
                catch (Exception e) { MessageBox.Show(("Error: " + e.Message)); }
                if (sqlConnection.State == System.Data.ConnectionState.Open) sqlConnection.Close();
                return false;
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑2:

所以根据答案,我重新编辑了帖子,现在我的异常处理代码看起来像这样......

DAL

public bool InsertAccount(IBankAccount ba) …
Run Code Online (Sandbox Code Playgroud)

.net c# mvp exception-handling

1
推荐指数
1
解决办法
1602
查看次数

RxJava:在Android MVP中自动取消订阅

我使用RxJava/ Retrofit在Android应用程序与MVP模式.

现在我想清理xxxPresenter什么时候Activity/Fragment为了防止破坏oom.

Presenter简单代码:

public class LoginPresenter {

    private LoginView mLoginView;
    private LoginMode mLoginMode;
    private Subscriber mLoginSubscriber;

    public LoginPresenter(LoginView loginView) {
        this.mLoginView = loginView;
        mLoginMode = new LoginMode();
    }

    void login(String userName, String pwd) {
        mLoginSubscriber = new Subscriber() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                if (mLoginView != null) {
                    mLoginView.onLoginSuccess();
                }
            }
        };
        mLoginMode.login(userName, pwd, mLoginSubscriber); …
Run Code Online (Sandbox Code Playgroud)

mvp android rx-java

1
推荐指数
1
解决办法
1405
查看次数

尝试使用Dagger 2实现MVP - 如何在提供的演示者中获取对Activity的引用

我正在尝试用MVP和Dagger建立一个应用程序,

视图是一个Activity其中实现了一个图界面.

public class OverviewActivity extends AppCompatActivity implements OverviewContract.View {

    @Inject OverviewPresenter presenter;

    @BindView(R.id.history_days) ListView HistoryLabels;
    @BindView(R.id.history_events) ListView HistoryEvents;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overview);
        ButterKnife.bind(this);

        DaggerOverviewComponent.create().inject(this);

    }

    @Override
    public void showHistory(List<Exercise> history) {
      // ...
    }

    @Override
    public void updateScoreSlider(float value) {
      // ...
    }

    @OnClick(R.id.add_event_button)
    public void addEvent(View v){
      // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

演示看起来像这样

public class OverviewPresenter implements OverviewContract.Events {

    OverviewContract.View view;

    public OverviewPresenter( OverviewContract.View overviewView ) {
        view = …
Run Code Online (Sandbox Code Playgroud)

mvp android dependency-injection dagger-2

1
推荐指数
1
解决办法
1745
查看次数

存储库和用例之间有什么区别?

我正在使用干净的体系结构创建一个聊天应用程序,我想检查用户在应用程序启动时是否已登录,如果用户未登录则打开登录屏幕,所以我的问题是:

  1. 最好的实现方法是什么?我是否应该LoginActivity启动启动器活动并检查LoginPresenter启动时间(如果用户已经登录)然后打开MainActivity?我应该把检查用户是否已通过身份验证的逻辑放在哪里(IsLoggedInUseCase也许?)?

  2. 我真的不了解存储库和用例之间的区别是什么,当已经有and 时,为什么还要创建一个GetAllUsersUseCaseand ..etc 。为什么要制作一个全新的类来引用存储库中已经存在的方法?EditUserUseCaseUsersRepository.getAllUsers()UsersRepository.editUser(User user)

mvp android repository-pattern clean-architecture

1
推荐指数
1
解决办法
853
查看次数

带有MVP的Dagger 2,避免在视图重新创建时创建额外的主持人对象

我实现了MVP模式的应用程序Loader,以保持对视娱乐演示对象(有关于这个的文章在这里).我是Dagger 2的新手,试图与当前代码一起实现它.

我已经设法使它工作,但现在我的演示者创建了两次.起初它是使用初始化的工厂类创建的onCreateLoader,但是当添加Dagger 2实现时,我创建了两个对象(在工厂类和注入时).

现在我避免创建一个新的演示者onCreateLoader并改为传递注入的演示者.问题在于视图重新创建:每次销毁和重新创建视图时,都会在OnCreate/中注入一个新的演示者OnCreateView.这是场景:

  1. 注入一个新的演示者:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ...
        getControllerComponent().inject(this);
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 初始化Loader,onCreateLoader被称为如果Loader不存在.请注意,我们通过了注入的演示者:

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getLoaderManager().initLoader(PRESENTER_LOADER_ID, null, this);
    }
    
    @Override
    public Loader<MyPresenter> onCreateLoader(int id, Bundle args) {
        switch (id) {
            case PRESENTER_LOADER_ID:
                return new PresenterLoader<>(getContext(), presenter);
                //return new PresenterLoader<>(getContext(), new MyPresenterFactory());
        }
    
        return null;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 分配从中收到的演示者Loader.如果它刚刚创建,我们分配已经分配的相同对象,所以没有任何反应.但是,如果视图被重新创建,那么Dagger 2会注入一个新的演示者,在这里我们扔掉新的演示者并用旧的演示者替换它 …

java mvp android loader dagger-2

1
推荐指数
1
解决办法
716
查看次数

实现存储库模式的正确方法是什么?以及如何使用它?

我有一个被调用的对象Product,我想从所有产品列表中检索某个产品的"物料清单"(存储在SQL Server中).我应该先创建Product对象,然后通过方法从我的存储库中获取数据,如下所示:

var productId = "1";
Product product = new Product(productId);
DataTable billOfMaterial = product.GetBillOfMaterial();
Run Code Online (Sandbox Code Playgroud)

或者从静态存储库检索数据strait,如下所示:

var productId = "1";
DataTable billOfMaterial = product.GetBillOfMaterial(productId);
Run Code Online (Sandbox Code Playgroud)

或者可能是这样的?

var productId = "1";
DataTable BillOfMaterial = ProductRepository.GetBillOfMaterial(productId);
Run Code Online (Sandbox Code Playgroud)

或者也许当我创建产品时,我会自动在产品的构造函数中获取Bill:

var productId = "1";
Product product = new Product(productId);
DataGrid.DataSource = product.BillOfMaterial;
Run Code Online (Sandbox Code Playgroud)

我正在使用MVP模式,并且不知道最佳做法是填充对象只是为了获得DataTable或者我是否可以快速使用静态存储库.这样做的正确方法是什么?

c# mvp design-patterns repository-pattern

1
推荐指数
1
解决办法
137
查看次数