Если процесс класса DoAction
не изменяется, вы можете напрямую инкапсулировать GetFileContent
, ApplyBusinessLogic
, UploadContent
в класс DoAction
.
Но я бы создал интерфейсы для каждого классачтобы сделать код более гибким.
public interface IFileContent{
byte[] GetFileContent();
}
public interface IApplyBusinessLogic{
void ApplyLogic();
}
public interface IUploadContent{
void Upload();
}
Тогда каждый класс реализует каждый интерфейс, который соответствует его действию.
public class GetFileContent : IFileContent {
public byte[] GetFileContent(){
}
// in here there is a method to return the file content
}
public class ApplyBusinessLogic : IApplyBusinessLogic {
public void ApplyLogic(){
}
// in here there is a method to get that file content as param and apply business logic
}
public class UploadContent : IUploadContent{
public void Upload(){
}
// get the modified content and upload it
}
Тогда я бы использовал инъекцию конструктора для внедрения продолжения, класс позволилкод более гибкий.
public class DoMyAction {
IFileContent _content;
// call the method in above class and get the content
IApplyBusinessLogic _doMyThing;
// do my stuff using that file content
IUploadContent _uploader;
// upload the content
public DoMyAction(IFileContent content,IApplyBusinessLogic doMyThing,IUploadContent uploader){
_content = content;
_doMyThing = doMyThing;
_uploader = uploader;
}
public void excuteAPI(){
//doing something here
}
}
Вы можете установить логику выполнения в методе excuteAPI
из DoMyAction
класса.