假设以下域实体:
public enum Role
{
User = 0,
Moderator = 1,
Administrator = 2
}
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Role Role { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要知道用户是否可以执行"编辑"操作.所以我有2个解决方案:
在User实体中创建CanEdit方法
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Role Role { get; set; }
public bool CanEdit()
{
return Role == Role.Moderator || Role == Role.Administrator;
}
}
Run Code Online (Sandbox Code Playgroud)
为用户类型创建CanEdit扩展方法:
public static class UserExtensions
{
public static bool CanEdit(this User user)
{
return user.Role == Role.Moderator || user.Role == Role.Administrator;
}
}
Run Code Online (Sandbox Code Playgroud)
两种解决方案都有效,但问题是何时使用标准方法与使用扩展方法?
Aar*_*ght 11
对于普通的普通静态方法,扩展方法只是语法糖.
如果你控制类的结构,你应该实施所有必要的功能中的类.扩展方法确实有用/必要的地方是你不拥有你想要"扩展"的类.
对于这个例子,我认为你应该将逻辑放在User类中.它是用户自身的逻辑功能; 消费者应该能够使用该CanEdit()方法而无需使用甚至不了解UserExtensions该类.
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |