
рдореИрдВ рд╣рд░рдм рдЬрд╛рд╡рд╛ рд╕рдореБрджрд╛рдп рдХреЛ
рдЧреНрд░реАрди-рдлрд╝реЙрд░реЗрд╕реНрдЯ рдирд╛рдордХ рдПрдХ рдЫреЛрдЯреЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА (рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ) рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдФрд░ рдЬреЗрдИрдИ рдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрдЯ рдХреЗ рддрд╣рдд рд╣рдо рд╕реАрдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЧреНрд░реАрди-рдлреЙрд░реЗрд╕реНрдЯ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛
рдмрд╣реБрдд рдмрд╛рд░, рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рдд
- рд╡реНрдпрд╡рд╕рд╛рдп рдХреА рдкрд░рдд
- рдбреЗрдЯрд╛ рд▓реЗрдпрд░
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реНрдпрд╡рд╕рд╛рдп рдкрд░рдд рдФрд░ рдбреЗрдЯрд╛ рд╕реНрддрд░ рдореЗрдВ рд╕реЗрд╡рд╛ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
рдРрд╕реА рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public interface UserService { User createUser(Object someData); void activateUser(long id); User updateUser(User updatedUser); void blockUser(long id); void unblockUser(long id); }
рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, рд╕рдорд╛рди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рдХрд╛ рдереЛрдХ рдмрдврд╝рддрд╛ рд╣реИ:
public class UserServiceImpl implements UserService {
рдирддреАрдЬрддрди, рдХрдХреНрд╖рд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рдФрд░ рдХреЛрдб рдХреА 1000 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдвреВрдВрдврдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдард┐рди рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╛рдзрд╛рди
рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдПрдХ рдмрдбрд╝реА рд╕реЗрд╡рд╛ рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ:
public interface UserBasicService { User createUser(Object someData); void activateUser(long id); User updateUser(User updatedUser); } public interface UserModerationService { void blockUser(long id); void unblockUser(long id); }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рджрдЧреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
рд╡рд░реНрджреА рдЬреБрджрд╛рдИ рдХреА рдХрдард┐рдирд╛рдИ : рд╕реЗрд╡рд╛ рдХреЛ рд╕рдорд╛рди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рдирдИ рд╕реЗрд╡рд╛ рдореЗрдВ 3 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢реЗрд╖ рд╣реИрдВ, 10 рдЕрдиреНрдп рдореЗрдВред
рдкреГрдердХреНрдХрд░рдг рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ : рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╕рд╣рд╛рдпрдХ рд╕реЗрд╡рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рддрд░реАрдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдордЭрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред
рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдиреНрдореВрд▓рди, рд▓реЗрдХрд┐рди рдХрд╛рд░рдг рдирд╣реАрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдирдИ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рд╡реЗ рднрд╛рд░реА-рд░реЗрдЦрд╛ рдХреЗ 1000-рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рднреА рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рдирдП рддрд░реАрдХреЗ рд╕реЗ рдмреЛрдЭрд┐рд▓ рд╕реЗрд╡рд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдкрд░рдорд╛рдгреБ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рдзрд╛рди
рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдиреЛрдВ рдореЗрдВ рд╕рд░рд▓ рд╡рд┐рднрд╛рдЬрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЦреБрдж рд╕реЗ рдкреВрдЫреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкрд░рдорд╛рдгреБ рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдмреЗрд╢рдХ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЖрдЦрд┐рд░рдХрд╛рд░, рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рдЗрд╕рдХреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдКрдкрд░ рдХреА рдХрдорд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓реЗрдЧрд╛:
рдЕрд╕рдорд╛рди рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрд▓рдЧрд╛рд╡ рдХреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ : рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ: рдЬрдм рдирдП рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ рдкреБрд░рд╛рдиреЗ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛ рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВред
рд╣рд░рд┐рдд-рд╡рди рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЧреНрд░реАрди-рдлрд╝реЙрд░реЗрд╕реНрдЯ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдПрдХреНрд╢рди-рд╣реИрдВрдбрд▓рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЪрд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдШрдЯрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдХрд╛рд░реНрдп
рдПрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдПрдХ рдкрд░рдорд╛рдгреБ "рд╡рд┐рдзрд┐" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ "рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ:
рд╣реИрдВрдбрд▓рд░
рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
@Mapping(SomeAction.class) public class SomeHandler extends Handler<SomeAction>{ @Inject SomeService service; public void invoke(SomeAction action) throws Exception { String input = action.getInput(); Integer result = service.doSomeWork(input); action.setOutput(result); } }
рдврд╛рдВрдЪрд╛
рдЗрдВрдЬрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╢рди рдФрд░ рд╣реИрдВрдбрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдкреНрд░рдореБрдЦ рд╡рд░реНрдЧреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо ActionService рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ UserService рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдВрдЧреЗ:
import com.gf.service.ActionService; public interface UserService extends ActionService {
рдЖрдЧреЗ, рд╣рдо рдХрдИ рдПрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗ:
import com.gf.Action; public class CreateUser extends Action<Object, User> { public CreateUser(Object someData){ this(someData); } } public class ActivateUser extends Action<Long, Void> { public ActivateUser(Long id){ this(id); } }
рдпрд╣ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
@Mapping(CreateUser.class) public class CreateUserHandler extends Handler<CreateUser>{ public void invoke(CreateUser action) throws Exception { Object input = action.getInput(); User user = ... action.setOutput(user); } }
UserServiceImpl рдХреЗ рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
import com.gf.Action; import com.gf.core.Engine; public class UserServiceImpl implements UserService { Engine engine; public UserServiceImpl(){ engine = new Engine();
рдирддреАрдЬрддрди, рд╣рдордиреЗ рдмрдбрд╝реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрдИ рдПрдХреНрд╢рди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВрдб рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдХрдИ рд╣реИрдВрдбрд▓рд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕рдВрджрд░реНрдн
рд╣рдордиреЗ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рддрд░реНрдХ рдХреА рдПрдХрд╛рдЧреНрд░рддрд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдкрд░рдорд╛рдгреБ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЧреНрд░реАрди-рдлреЙрд░реЗрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХреНрд╢рди-рд╣реИрдВрдбрд▓рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╛рдж рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЧреНрд░реАрди-рдлрд╝реЙрд░реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдкрдиреЗ рдХрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ!
рд╕рдВрджрд░реНрдн:
рд╣рд░рд┐рдд-рд╡рди рдХреА рд░реВрдкрд░реЗрдЦрд╛рдкреНрд░рд▓реЗрдЦрди