improving rpc bkp
TRANSCRIPT
![Page 1: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/1.jpg)
eleks.com eleks.com
RPC. part 2. My Project. Using some patterns
![Page 2: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/2.jpg)
Improve proto types for using them in collections- Add Empty message type for void input or output parameters.- Add some repeatable types for data collections.- Improve Client and server to use those types - Don’t forget to add “Google.Protobuf.Custom v3.0.0-beta” reference to Client and Server
![Page 3: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/3.jpg)
// The request message containing the user's name.message stringRequest { string str = 1;}// The response message containing Usermessage User { int32 id = 1; string name = 2; string surname = 3;}
// The response message containing the USERSmessage UsersCollection { repeated User users = 1;}message Empty {}
![Page 4: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/4.jpg)
Server side code sample//private server fieldGoogle.Protobuf.Collections.RepeatedField<User> users;
public Task<UsersCollection> GetUserByName(stringRequest request, ServerCallContext context) { var reply = new UsersCollection();
var enumerator = users.GetEnumerator();
do { if (enumerator.Current != null) { if (enumerator.Current.Name == request.Str)
{ reply.Users.Add(enumerator.Current); } }
} while (enumerator.MoveNext());
return Task.FromResult(reply);}
![Page 5: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/5.jpg)
Client side code sample var users = client.GetUserByName(new stringRequest { Str = user }).Users; var enumerator = users.GetEnumerator();
do { if (enumerator.Current != null) { //do smth with user element } } while (enumerator.MoveNext());
![Page 6: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/6.jpg)
Online Shop sample
![Page 7: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/7.jpg)
InterfacesClient:
- Order a good (returns order id, or 0)- Cancel order (by order id)- Get my orders
Server:- Buy, Cancel handling- Some internal logic
![Page 8: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/8.jpg)
Lets CODE IT!
![Page 9: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/9.jpg)
Server Internal Logic. How to implement?
What is Template Method?
Can we use it here?
![Page 10: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/10.jpg)
What to do, if need to switch between RPC and non-RPC Server ?
Need to Adapt!
Real-Time Switching (Strategy)
![Page 11: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/11.jpg)
To Learn From:I Strongly Recommend this book for Patterns explanation:“Freeman Er, Freeman El - design patterns” (clear explanation, funny)
![Page 12: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/12.jpg)
eleks.com
Thanks!
![Page 13: Improving rpc bkp](https://reader035.vdocuments.site/reader035/viewer/2022062412/586fdd4f1a28ab18428b6815/html5/thumbnails/13.jpg)
eleks.com
Inspired by Technology.Driven by Value.