我试图了解在 API 中使用访问者模式的好处。下面的例子是我看到的一个例子,我想要一个例子来说明为什么这种模式是有益的,即好处。什么是负面的替代实现以及与此相比的原因。从下面的实现中可以获得什么好处。在这个 api 中,它联系多所大学以获取他们提供的课程。然后,每个获取课程服务使用访问者模式具有定义数量的响应:
控制器
[HttpGet]
public async Task<IActionResult> Get()
{
// CourseService already retrieved for a given uni
var result = await courseService.GetCourses(userSession);
return result.Accept(new CourseVisitor());
}
服务 - 每个 Uni 都有自己的 GetCourses 服务,但由于访客模式,它们都设置了响应
public async Task<CoursesResult> GetCourses(UserSession userSession) {
// Depending on response from a given uni a set number of responses can be returned across ass uni services e.g
return new CoursesResult.BadRequest(); **or**
return new CoursesResult.Success(); etc
}
元素抽象/具体元素
public abstract class GetCourses
{
public abstract T Accept<T>(ICourseVisitor<T> visitor);
public class Successful : CoursesResult
{
public CourseList Response { get; }
public Successful(CourseList response)
{
Response = response;
}
public override T Accept<T>(ICourseVisitor<T> visitor)
{
return visitor.Visit(this);
}
}
// Other responses then defined e.g Bad Request
访问者
public interface ICourseVisitor<out T>
{
T Visit(GetCoursesResult.Successful result);
T Visit(GetCoursesResult.BadRequest result);
游客
internal class CourseVisitor : ICourseVisitor<IActionResult>
{
public IActionResult Visit(GetCourses.Successful result)
{
return new OkObjectResult(result.Response);
}
更新的查询 此外,我试图了解为什么服务无法返回如下内容:
//Service returns this: return new Successful(listResponse)
public interface ICoursesResult
{
IActionResult Accept();
}
public class Successful : ICoursesResult
{
public CourseList Response { get; }
public Successful(CourseList response)
{
Response = response;
}
public IActionResult Accept()
{
return OkObjectResult(Response);
}
}
MMTTMM
慕妹3146593
相关分类