假设我们有以下课程:
public class Ticket {
public int Id { get; set; }
public string Event { get; set; }
...
}
public class TicketService {
public void acceptTicket(Ticket ticket) {
...
}
...
}
我的问题是,哪里是添加与故障单实体相关的静态帮助方法(不需要像服务类那样的状态)的最佳位置? (请记住,这是整个系统中许多其他实体/服务中的一个实体/服务)。
现在我正在考虑以下可能性:
为了清楚起见,这就是我对#2或#3的意思。
public class TicketService {
public void acceptTicket(Ticket ticket) {
...
}
...
public static class Helper {
public static Dictionary<string, List<Ticket>> groupByName(List<Ticket> tickets) {
// returns the map of name/tickets
}
}
}
在这种情况下,API可能如下所示:
Ticket ticket = new Ticket();
List<Ticket> tickets = new List<Tickets>();
TicketService service = new TicketService();
service.acceptTicket(ticket);
// leaving out the creation of a list of tickets...
var groups = TicketService.Helper.groupByName(tickets);
答案 0 :(得分:2)
您可以使用扩展方法。在单独的TicketExtensions
类中创建它们。
public static class TicketExtensions {
public static Dictionary<string, List<Ticket>> groupByName(this List<Ticket> tickets) {
// returns the map of name/tickets
}
}
...
var ticket = new Ticket();
var tickets = new List<Tickets>();
var service = new TicketService();
service.acceptTicket(ticket);
// leaving out the creation of a list of tickets...
var groups = tickets.groupByName();
此外,使用IEnumerable<T>
,IList<T>
或IDictionary<K, V>
等接口比具体集合类更可取。
答案 1 :(得分:1)
我认为答案取决于您希望调用该方法的人。
就个人而言,我会将静态方法放在TicketService类上,因为它可以在多个实体上运行,并使其对服务本身是私有的。
然后,我将在服务上创建一个实例方法,以向服务的任何使用者公开该功能。它有点使API更清洁,并避免人们必须知道某些东西是否是静态方法的实现细节。
答案 2 :(得分:1)
另一种可能性是使用单例模式。
它具有以下优点:
public interface ITicketHelper
{
void HelpThis(Ticket t);
IList<Ticket> HelpThat();
}
public class TicketHelper : ITicketHelper
{
public static readonly ITicketHelper Instance = new TicketHelper();
private TicketHelper()
{ ... }
public void HelpThis(Ticket t)
{ ... }
public IList<Ticket> HelpThat()
{ ... }
}
用法
var result = TicketHelper.Instance.HelpThat();
答案 3 :(得分:0)
我不会称其为辅助方法。这是一种聚合方法。因此,我将使用此方法制作一个名为TicketAggregator的类。然后,当您有诸如“ GetAverageTicketPrice”之类的其他名称时,也可以将其放入TicketAggregator中。
通过将其命名为TicketAggregator,您可以更清楚地描述其内容。有人立即知道该类中有什么方法。此外,helper这个词真的没有任何意义……不是所有的方法都可以帮助您吗?