Define Factory, Builder and Manager
Bug: none Change-Id: I314295262c18319d3b0ad37a11641afafc83b006 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265864 Commit-Queue: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37288}
This commit is contained in:
parent
80b7c6befd
commit
c1be89f696
@ -37,6 +37,47 @@ This may contain a SocketServer for processing I/O, and is used for policing
|
|||||||
certain calling pattern between a few core threads (the NetworkThread cannot
|
certain calling pattern between a few core threads (the NetworkThread cannot
|
||||||
do Invoke on the Worker thread, for instance).
|
do Invoke on the Worker thread, for instance).
|
||||||
|
|
||||||
|
## Reserved class suffixes
|
||||||
|
|
||||||
|
C++ classes with names ending in the suffixes "Factory", "Builder" and "Manager" are supposed to behave
|
||||||
|
in certain well known ways.
|
||||||
|
|
||||||
|
For a particular class name Foo, the following classes, if they exist, should
|
||||||
|
behave as follows:
|
||||||
|
|
||||||
|
* FooFactory: Has a Create function that creates a Foo object and returns the
|
||||||
|
object or an owning reference to it (for instance std::unique_ptr or
|
||||||
|
rtc::scoped_refptr<Foo>). The Create function should NOT alter the factory
|
||||||
|
state; ideally, it is marked const. Ownership of the returned object is only
|
||||||
|
with the caller.
|
||||||
|
|
||||||
|
* FooBuilder: Has a Build function that returns ownership of a Foo object (as
|
||||||
|
above). The Builder can only be used once, and resources given to the Builder
|
||||||
|
before the Build function is called are either released or owned by the Foo
|
||||||
|
object. The Create function may be reference-qualified (declared as ```Foo
|
||||||
|
Build() &&```), which means it is invoked as ```std::move(builder).Build()```,
|
||||||
|
and C++ will ensure that it is not used again.
|
||||||
|
|
||||||
|
* FooManager: Has a Create function that returns an rtc::scoped_refptr<Foo> (if
|
||||||
|
shared ownership) or a Foo* (if the Manager retains sole ownership). If
|
||||||
|
Create() cannot fail, consider returning a Foo&. The Manager is responsible
|
||||||
|
for keeping track of the object; if the Create function returns a Foo*, the
|
||||||
|
Foo object is guaranteed to be destroyed when the FooManager is destroyed.
|
||||||
|
|
||||||
|
If a Manager class manages multiple classes of objects, the Create functions
|
||||||
|
should be appropriately named (the FooAndBarManager would have CreateFoo() and
|
||||||
|
CreateBar() functions), and the class will have a suitable name for the group of
|
||||||
|
objects it is managing.
|
||||||
|
|
||||||
|
FooFactory is mainly useful for the case where preparation for producing Foo
|
||||||
|
objects is complex. If Foo can be created with just an argument list, consider
|
||||||
|
exposing its constructor instead; if Foo creation can fail, consider having
|
||||||
|
a free function called CreateFoo instead of a factory.
|
||||||
|
|
||||||
|
Note that classes with these names exist that do not follow these conventions.
|
||||||
|
When they are detected, they need to be marked with TODO statements and bugs
|
||||||
|
filed on them to get them into a conformant state.
|
||||||
|
|
||||||
## Synchronization primitives
|
## Synchronization primitives
|
||||||
|
|
||||||
### PostTask and thread-guarded variables
|
### PostTask and thread-guarded variables
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user