是否可以使用组合而不是继承来设计基本控制器结构?
基本上,我应用程序中的每个模型都有自己定义的服务,其中定义了每个模型的所有操作:
public interface IPersonService :
IReadRepository<PersonFilterRequest, PersonReadResponse, Person>,
IInsertRepository<PersonInsertRequest, PersonInsertResponse, Person>,
IUpdateRepository<PersonUpdateRequest, PersonUpdateResponse, Person>,
IDeleteRepository<PersonDeleteRequest, PersonDeleteResponse, Person>
{
// ...
}
public class PersonService : IPersonService
{
public IReadAction<PersonFilterRequest, PersonReadResponse, Person> Reader { get; private set; }
public IInsertAction<PersonInsertRequest, PersonInsertResponse, Person> Inserter { get; private set; }
public IUpdateAction<PersonUpdateRequest, PersonUpdateResponse, Person> Updater { get; private set; }
public IDeleteAction<PersonDeleteRequest, PersonDeleteResponse, Person> Deleter { get; private set; }
}
我想做的是为每个动作创建基本控制器类(即
ReadController
、InsertController
、UpdateController
、DeleteController
),然后使用选定的控制器(取决于每个数据库模型上允许的动作)有点像:
[ApiController]
public class PersonController
{
public ReadController<PersonFilterRequest, PersonReadResponse, Person, PersonService> Read { get; private set; }
public InsertController<PersonInsertRequest, PersonInsertResponse, Person, PersonService> Insert { get; private set; }
public UpdateController<PersonUpdateRequest, PersonUpdateResponse, Person, PersonService> Update { get; private set; }
public DeleteController<PersonDeleteRequest, PersonDeleteResponse, Person, PersonService> Delete { get; private set; }
}
然后,当用户触发一个动作时,将调用适当的控制器(及其方法)(即,如果触发插入,则应调用
PersonController.Insert
属性中的适当方法)
这样的事情可能吗?