也许这是一个微不足道的情况,但它对我来说很困惑,我需要一些澄清,如何以正确的方式处理它。
为了简单起见,模型如下:
(User被分配给许多项目,且project有许多用户被分配给)。
null
…\Api\v1\Projects\{projectId}\users\{userId}
允许两个http操作:
API控制器使用服务层来执行这些操作。服务接口为休闲状态:
void projectService.assignUser(int projectId, int userId)
void projectService.dismissUser(int projectId, int userId)
服务使用dbContext来执行这些操作。
问题1:哪个元素应该负责检查projectId和userId是否正确?IMHO最好把这个逻辑放在服务层,因为它可以重用。
问题2:如果projectId和userid不正确(例如:project/user不存在或不允许赋值),这些方法应该返回什么?
我的第一个想法是返回空值,但我认为这没有太大意义。主要是因为如果enitiyId不正确,service中的类似方法将返回null。例如:ProjectService.GetProject(projectId)如果项目不存在,则返回null
第二个方法是回击布尔。False至少有一个参数不正确
第三个想法是用Message抛出ArgumentException。它似乎是好的,但它使api控制器捕捉异常。
Q1)我认为将它们放置在服务层是一个有效的想法,我可以想到许多您可能想要重用这些方法的场景。
null
public class BusinessLogicMessage<T> where T : new()
{
public BusinessLogicMessage(T result)
{
Result = result;
Status = BusinessLogicStatus.Success;
Message = string.Empty;
}
public BusinessLogicMessage(T result, BusinessLogicStatus status, string message)
{
Result = result;
Status = status;
Message = message;
}
public BusinessLogicStatus Status { get; set; }
public string Message { get; set; }
public T Result { get; set; }
}
public class BusinessLogicMessage
{
public BusinessLogicMessage()
{
Status = BusinessLogicStatus.Success;
Message = string.Empty;
}
public BusinessLogicMessage(BusinessLogicStatus status, string message)
{
Status = status;
Message = message;
}
public BusinessLogicStatus Status { get; set; }
public string Message { get; set; }
}
public enum BusinessLogicStatus
{
Success,
Failure,
Warning
}
因此,如果方法成功,只需返回类的默认构造函数,该构造函数的状态为“成功”。如果失败或其他情况发生,您可以添加详细信息。如果需要为该方法返回特殊结果对象,则可以将其附加到结果
我的两分钱。
更新为更好的答案。
答案1:您应该不断验证ProjectId/UserID到服务层以供重用,并在任何需要的地方调用这些函数。
答案2:基于valid/invalid projectid/userid创建一个json。它可能包含与用户或项目相关的详细信息(如果两者都有效),并且在Id无效的情况下返回错误消息和错误Id(例如1表示无效的项目,2表示无效的用户)。
a)JsonObject ProjectService.AssignUser(int projectId,int userId)
EG:br>有效ID(两者):
stat":“OK”,“userId”:“userId here”,“projectId”:“projectId here}
无效的项目ID:
null
b.JsonObject ProjectService.DispersUser(int projectId,int userId)
有效ID(两者):
状态“:”OK}
无效的用户ID:
ErrorMsg:无效的用户ID,Stat:FaileError:2}