mardi 31 octobre 2017

How to share memory over long chain of method calls?

I need to figure out a way to save and log a method request and response conditionally, with the condition being the latency of the top-level method crossing the p50 latency. The call visualization is as follows:

topLevel() -> method1() -> method2() -> ... -> makeRequest()

In makeRequest is where the request and response to that request are that I need to log.

But I'll only know if I need to actually log those at some point on the way back up the call stack - if topLevel method is taking too long.

So to me, the only option is to save the request and response in makeRequest no matter what and make that available to the topLevel method. The topLevel method will check if latency is above p50 and conditionally log the request and response.

This all leads to the titular question: How to share memory over long chain of method calls?

I don't want to be passing objects back through multiple method calls, polluting function signatures.

What is the best pattern for this? Maybe using a local cache to save the request and response and then retrieving it in topLevel? Is there an aspect oriented approach to solving this?

Aucun commentaire:

Enregistrer un commentaire