gpt4 book ai didi

c# - MVVM逻辑架构

转载 作者:行者123 更新时间:2023-11-30 21:35:32 25 4
gpt4 key购买 nike

<分区>

我在为我的 MVVM 项目设计好的架构时遇到了问题。我想出了类似下面的东西,请阅读并告诉我这是错误的方法还是好的:我将有一些界面:

 public interface ISomeStrategy
{
void LoadData();

void Search(string text);

IList<SomeObject> SomeObjectsList { get; set; }
}

还有一个实现这个接口(interface)的类:

 public class FirstStrategy: INotifyPropertyChanged, ISomeStrategy
{
public CompositePayslipItem(IDataService dataService)
{
DataService = dataService;
}
private IDataService DataService;
public IList<SomeObject> SomeObjectList{get; set;}

public async void LoadData()
{
SomeObjectList =await DataService.GetAll();
}

public async void Search(string text)
{
SomeObjectList =await DataService.GetByKey(text);
}

}

和 View 模型:

public void SomeViewModel
{
public SomeViewModel(IDataService dataService)
{
Strategy = new FirstStrategy(dataService);
Strategy.LoadData();
}
public ISomeStrategy Strategy {get; set;}
private Command<string> searchCommand;

public Command<string> SearchCommand => searchCommand?? (searchCommand= new Command(ExecuteSearchCommandAsync));


private async void ExecuteSearchCommandAsync(string text)
{
Strategy.Search(text);
}
}

如您所见,所有逻辑都将位于“Strategy”类中,这些类将通过 ViewModel 绑定(bind)到 View。它给我什么?我可以在运行时动态更改实现。例如,如果我有一个 Employee 和 Manager,其中搜索和获取数据的逻辑不同,我可以只实现另一个类并更改属性 ISomeStrategy Strategy,而无需编辑 Employee 的现有代码(很多方法中没有额外的 if)。不幸的是,它存在一些问题:

  1. 所有绑定(bind)(命令除外)都将在 *Factory 类中,这可能会产生误导
  2. 在大多数情况下,一个 VM 将有一个 Strategy 实现,因此会有很多代码是无用的。另一方面,将来客户可以要求另一个角色(实现)并且会更容易(只需实现另一个类 - 无需编辑旧代码)。

你怎么看?或者,也许您使用其他模式来处理业务逻辑?

编辑:Xaml 部分:

<ContentPage
x:Class="Test.SomePage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<StackLayout>
<SearchBar
HeightRequest="50"
SearchCommand="{Binding SearchCommand}" />
<ListView
x:Name="formatsList"
Margin="0"
ItemsSource="{Binding Strategy.SomeObjectList}">
</StackLayout>
</ContentPage>

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com