Определение модели MVP - PullRequest
       7

Определение модели MVP

0 голосов
/ 10 октября 2018

Я реализую шаблон MVP в Winform, и мой вопрос заключается в том, как модель определяется или реализуется?В настоящее время я даже не думаю!У меня есть View и Presenter, но, похоже, вся моя бизнес-логика в моем докладчике, а мои сущности в основном POCO или DTO.Я звоню в свои репозитории от моего докладчика и заполняю там свои сущности, а затем выполняю свою логику.Я считаю, что я пытаюсь достичь пассивного MVP.

Может ли кто-нибудь указать мне правильное направление при построении модели или, может быть, я правильно ее использую, и модель действительно не нужна, если у меня есть несколько сущностей?

Интерфейс

 public interface IMaterialSearchView
{
    MaterialGridDTO ReturnMaterial { get; set; }       
    int CurrentRowIndex { get; }
    string FilterUnit { get; set; }
    string FilterType { get; set; }
    string FilterMaterial { get; set; }
    string FilterGrade { get; set; }
    string FilterDiameter { get; set; }
    string FilterThickness { get; set; }
    string FilterWidth { get; set; }
    string FilterWallThickness { get; set; }
    bool FilterTubing { get; set; }
    bool FilterWithRadius { get; set; }
}

public interface IMaterialView : IMaterialSearchView
{
    string ID { get; set; }
    string Unit { get; set; }
    string Type { get; set; }
    string Material { get; set; }
    string Grade { get; set; }
    string MaterialName { get; set; }
    string Barcode { get; set; }
    string Description { get; set; }
    string VendorLength { get; set; }
    string VendorColor { get; set; }
    string FormStatus { set; }
    string Constant { get; set; }
    string Diameter { get; set; }
    string Thickness { get; set; }
    string Width { get; set; }
    string WallThickness { get; set; }
    bool ReadOnlyDiameter { set; }
    bool ReadOnlyThickness { set; }
    bool ReadOnlyWidth { set; }
    bool VisibleWallThickness { set; }
    bool ReadOnlyMaterialName { set; }
    bool EnableTubing { set; }
    bool EnableWithRadius { set; }
    Color FieldColor { get; set; }
    bool WithRadius { get; set; }
    bool Tubing { get; set; }
    bool EnableRemove { set; }        
    object MaterialList { set; }
    object TypeList { set; }
    object GradeList { set; }
    object MaterialFilterList { set; }
    object TypeFilterList { set; }
    object GradeFilterList { set; }
    List<MaterialGridDTO> MaterialGrid { get; set; }

    void InformUser(string message);
    bool ExitForm(string message);
}

Просмотр

  private MaterialPresenter presenter;
    public frmMaterial(OpenMode OpenMode)
    {
        InitializeComponent();
        presenter = new MaterialPresenter(this);  
        if(OpenMode == OpenMode.SearchOnly) { splitMain.Panel1Collapsed = true; }
    }

Ведущий

public class MaterialPresenter
{
    private IMaterialView _view;
    public MaterialPresenter(IMaterialView view)
    {
        _view = view;
    }

Объекты, которые я использую в своем презентаторе (один из многих)

 public class Materials
    {       
        public string Barcode { get; set; }        
        public string FullName { get; set; }
        public string Material { get; set; }
        public string Type { get; set; }
        public string Grade { get; set; }
        public string Unit { get; set; }        
        public decimal Diameter { get; set; }
        public decimal Thickness { get; set; }        
        public decimal Width { get; set; }
        public decimal WallThickness { get; set; }
        public decimal Constant { get; set; }             
        public bool Tubing { get; set; }
        public bool WithRadius { get; set; }
        public string Description { get; set; }
        public decimal VendorLength { get; set; }
        public string VendorColor { get; set; }
        public string BarcodeInverse { get; set; }
        public string Material_ID { get; set; }
    }

Фрагменты парыиспользует, как я использую сущность.Вся моя _view ссылка на свойства представления, определенные интерфейсом

private void FillMaterialList()
{
    var materials = MaterialRepo.MaterialList();
    _view.MaterialList = materials;
    _view.MaterialFilterList = new BindingSource(materials, null);
}

public void OnApplyClick()
{
    var material = FillMaterial();
    try
    {
        var exist = MaterialRepo.ExistById(material.Material_ID);
        if (exist)
        {
            MaterialRepo.Update(material);
            _view.FormStatus = "Status: Update Successful.";
        }
        else
        {
            var id = MaterialRepo.Add(material);
            _view.ID = id.ToString();
            _view.FormStatus = "Status: Add Successful.";
        }

        var exit = _view.ExitForm("Material has been successfully Added/Updated \n\n Add/update another?");
        if (exit)
        {
            var line = new MaterialGridDTO
            {
                Material_ID = _view.ID,
                FullName = _view.MaterialName,
                Unit = _view.Unit
            };
            _view.ReturnMaterial = line;
            return;
        }
    }
    catch (Exception ex)
    {
        _view.InformUser(ex.Message);
        _view.FormStatus = "Status: Failed...";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...