рдЬрд╛рд╡рд╛ рд╕реЗ рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбреАрдЯреАрдУ рдФрд░ рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛

рдЬрд╛рд╡рд╛ рдФрд░ рдлреНрд▓реЗрдХреНрд╕ рдореЗрдВ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдПрдПрдордПрдл рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдмреНрд▓реЗрдЬрд╝ рдбреАрдПрд╕ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл, рдбреАрдЯреАрдУ (рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕) рдФрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдбреАрдЯреАрдУ рдХреЛрдб рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИред рдмреЗрд╢рдХ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╡рд╛ рдФрд░ рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рднреА рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдбреАрдЯреАрдУ рдФрд░ рджреВрд░рд╕реНрде рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдбреАрдЯреАрдУ рдпрд╛ рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВрдЧреЗред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдПрдПрд╕ рдбреАрдЯреАрдУ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрдирд╛рдЗрдЯ рдбреАрдПрд╕ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЯреВрд▓рдХрд┐рдЯ , рдкрд┐рдореЗрдВрдЯреЛ рдпрд╛ рдЧреИрд╕ 3 ред

Gas3 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ flexmojos рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдпрд╣ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рджрд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЖрдЧреЗ, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбреАрдЯреАрдУ рдЬрдирд░реЗрд╢рди


рдбреАрдЯреАрдУ рдкреАрдврд╝реА рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдХрд╛ SampleDto ред
 public class SampleDto { public String field1; public String field2; public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } } 

рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ git.example.com:jar:jar рдореЙрдбреНрдпреВрд▓ git.example.com:jar:jar ред
рд╣рдо git.example.com:flex:swf рдореЙрдбреНрдпреВрд▓ рдореЗрдВ ActionScript рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред SampleDto.java рд╕реЗ рдПрдПрд╕ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SampleDto.java рдЖрдкрдХреЛ flexmojos рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 <plugin> <groupId>org.sonatype.flexmojos</groupId> <artifactId>flexmojos-maven-plugin</artifactId> <version>3.9</version> <extensions>true</extensions> <configuration> <includeJavaClasses> <includeJavaClass>com.example.*</includeJavaClass> </includeJavaClasses> </configuration> <executions> <execution> <id>generate</id> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> 

рд╕рднреА рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рд╡рд░реНрдЧ рд╣реА рдФрд░ рдкреВрд░реНрд╡рдЬ (рдмреЗрд╕ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде)ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреАрдврд╝реА рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ SampleDto рдФрд░ SampleDtoBase ред рдореБрдЦреНрдп рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдкреВрд░реНрд╡рдЬ рд╣рдореЗрд╢рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдЗрд╕реЗ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЬрдирд░реЗрдЯрд░ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдЧрд╛ред

 [Bindable] [RemoteClass(alias="com.example.SampleDto")] public class SampleDto extends SampleDtoBase { } [Bindable] public class SampleDtoBase implements IExternalizable { public var _field1:String; public var _field2:String; public function set field1(value:String):void { _field1 = value; } public function get field1():String { return _field1; } public function set field2(value:String):void { _field2 = value; } public function get field2():String { return _field2; } public function readExternal(input:IDataInput):void { _field1 = input.readObject() as String; _field2 = input.readObject() as String; } public function writeExternal(output:IDataOutput):void { output.writeObject(_field1); output.writeObject(_field2); } } 

рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдЬрдирд░реЗрд╢рди


рдЕрдм рд╣рдо рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред рдПрдХ рдореЙрдбреНрдпреВрд▓ git.example.com:jar:jar java рд╡рд░реНрдЧ git.example.com:jar:jar рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд░реЗрдВред

 @RemoteDestination(id = "sampleService", channel = "amf") public class SampleService { public final String sampleMethod1() { return "test output"; } public final String getSampleField1(@Param("sampleDto") final SampleDto sampleDto) { return sampleDto.getField1(); } public final String getSampleField2(@Param("sampleDto") final SampleDto sampleDto) { return sampleDto.getField2(); } @IgnoredMethod public final void ignoredMethod() { } } 

@RemoteDestination рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдФрд░ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдирд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдкрд░ рд▓рдЯрдХрд╛ рджреЗрддрд╛ рд╣реИред @Param рдЙрддреНрдкрдиреНрди рд╡рд┐рдзрд┐ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред @IgnoredMethod рдЯреИрдЧ рдХреА рдЧрдИ рдкрджреНрдзрддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред
рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣рдо рдбреАрдЯреАрдУ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рджреЛ рд╡рд░реНрдЧ рд╣реИрдВ:

 [RemoteClass(alias="com.example.SampleService")] public class SampleService extends SampleServiceBase { } public class SampleServiceBase extends RemoteObject { private var _initRemote:Boolean = false; private function initRemote():void { destination = "sampleService"; channelSet = new ChannelSet(); channelSet.addChannel(ServerConfig.getChannel("amf")); _initRemote = true; } public function sampleMethod1():void { if (!_initRemote) initRemote(); getOperation("sampleMethod1").send(); } public function getSampleField2(sampleDto:SampleDto):void { if (!_initRemote) initRemote(); getOperation("getSampleField2").send(sampleDto); } public function getSampleField1(sampleDto:SampleDto):void { if (!_initRemote) initRemote(); getOperation("getSampleField1").send(sampleDto); } public function addOperationListener(op:Function, type:String, handler:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { if (op == this.sampleMethod1) this.getOperation("sampleMethod1").addEventListener(type, handler, useCapture, priority, useWeakReference); if (op == this.getSampleField2) this.getOperation("getSampleField2").addEventListener(type, handler, useCapture, priority, useWeakReference); if (op == this.getSampleField1) this.getOperation("getSampleField1").addEventListener(type, handler, useCapture, priority, useWeakReference); } public function removeOperationListener(op:Function, event:String, handler:Function):void { if (op == this.sampleMethod1) this.getOperation("sampleMethod1").removeEventListener(event, handler); if (op == this.getSampleField2) this.getOperation("getSampleField2").removeEventListener(event, handler); if (op == this.getSampleField1) this.getOperation("getSampleField1").removeEventListener(event, handler); } } 

рдЬреЗрдирд░реЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ


Gas3 рдЖрдк рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рддрд░реАрдХреЛрдВ рдкрд░ рд░рд┐рд╕реНрдкрд╛рдВрдбрд░реНрд╕ рдХреЛ рд▓рдЯрдХрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЧреНрд░реВрд╡реА рдФрд░ рдХрд╛рдлреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЛрдИ рднреА рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ ред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреНрд▓реЗрдХреНрд╕рдореЛрдЬреЛрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВ:

 <templates> <base-remote-template> ${project.basedir}/src/main/generator-templates/remoteBase.gsp </base-remote-template> </templates> 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрд╡рд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:

 public class SampleServiceBase extends RemoteObject { private static const logger:ILogger = Log.getLogger(getQualifiedClassName(SampleService).replace("::", ".")); private var _initRemote:Boolean = false; public function SampleServiceBase() { super(); } private function initRemote():void { destination = "sampleService"; channelSet = new ChannelSet(); channelSet.addChannel(ServerConfig.getChannel("amf")); _initRemote = true; } public function getSampleField1(sampleDto:SampleDto, responder:IResponder = null):AsyncToken { if (!_initRemote) { initRemote(); } var asyncToken:AsyncToken = getOperation("getSampleField1").send(sampleDto); if (responder) { asyncToken.addResponder(responder); } if (Log.isDebug()) { logger.debug("Method <getSampleField1> invoked with parameters <{0}>", sampleDto); } return asyncToken; } public function sampleMethod1(responder:IResponder = null):AsyncToken { if (!_initRemote) { initRemote(); } var asyncToken:AsyncToken = getOperation("sampleMethod1").send(); if (responder) { asyncToken.addResponder(responder); } if (Log.isDebug()) { logger.debug("Method <sampleMethod1> invoked with parameters "); } return asyncToken; } public function getSampleField2(sampleDto:SampleDto, responder:IResponder = null):AsyncToken { if (!_initRemote) { initRemote(); } var asyncToken:AsyncToken = getOperation("getSampleField2").send(sampleDto); if (responder) { asyncToken.addResponder(responder); } if (Log.isDebug()) { logger.debug("Method <getSampleField2> invoked with parameters <{0}>", sampleDto); } return asyncToken; } public function addOperationListener(op:Function, type:String, handler:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { if (op == this.getSampleField1) { this.getOperation("getSampleField1").addEventListener(type, handler, useCapture, priority, useWeakReference); } if (op == this.sampleMethod1) { this.getOperation("sampleMethod1").addEventListener(type, handler, useCapture, priority, useWeakReference); } if (op == this.getSampleField2) { this.getOperation("getSampleField2").addEventListener(type, handler, useCapture, priority, useWeakReference); } } public function removeOperationListener(op:Function, event:String, handler:Function):void { if (op == this.getSampleField1) { this.getOperation("getSampleField1").removeEventListener(event, handler); } if (op == this.sampleMethod1) { this.getOperation("sampleMethod1").removeEventListener(event, handler); } if (op == this.getSampleField2) { this.getOperation("getSampleField2").removeEventListener(event, handler); } } } 

рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреИрд╕ 3 рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдзрд╛рд░рдг рдмреАрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬреЗрдкреАрдП рдЗрдХрд╛рдИ рдмреАрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:
  1. рд╣рдореЗрдВ рдЬрд╛рд╡рд╛ рдФрд░ рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдмреАрдЪ рдмреЗрдореЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдпрджрд┐ рдЬрд╛рд╡рд╛ рдХреЛрдб рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
  2. рд╣рдордиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдПрд╕ рдбреАрдЯреАрдУ рдФрд░ рд░рд┐рдореЛрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдЗрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╕рд╛рдордЧреНрд░реА




ps рдореБрдЭреЗ рдлреНрд▓реИрд╢ / рдлреНрд▓реЗрдХреНрд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмреБрд░реЗ рд░реБрдЭрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In144872/


All Articles