我目前正在尝试了解所有不同的设计模式,我已经被设置为根据不同的列对 IQueryable
进行排序的任务,这就是它目前的实现方式:
if (choice == 1)
{
return from Animals in ctx.Animals orderby Animals.AnimalID descending select Animals;
}
else if (choice == 2)
{
return from Animals in ctx.Animals orderby Animals.Name descending select Animals;
}
else if (choice == 3)
{
return from Animals in ctx.Animals orderby Animals.Age descending select Animals;
}
然而,这对我来说似乎是一种糟糕的代码味道,它无法轻松添加不同的字段或排序选项,我的导师建议我最好实现策略模式并使用 Dictionary
来选择我们想要的策略实现,但是我不确定策略模式将如何应用于这种情况,任何有用的提示将不胜感激,如果需要更多信息,请询问。
最佳答案
应用策略模式,您将拥有一个ISortStrategy
接口(interface),然后是多个实现,例如SortById
、SortByName
和SortByAge
。该接口(interface)及其实现将具有类似 object Sort(Animal animal);
的方法,该方法返回动物的属性之一。
然后您只需在运行时选择适当的策略,然后像这样使用它:
return from animal in ctx.Animals
orderby sortStrategy.Sort(animal) descending
select animal;
关于c# - 使用Strategy Design Pattern(C#)对不同列的数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263650/