During the architecture designing the following aspects and rules were primary considered:
Observerdesign pattern is required for providing information for upper layer components.
Facadedesign pattern is used for Mobile and HMI transports functionality within one interface.
Observerinterface for providing information for upper layer components.
Adapterdesign pattern is used to provide permanent interface to transport layer.
Abstract Factorydesign pattern is used to create related objects without specifying their concrete classes directly.
Commanddesign pattern is used to treat requests as an object that provides possibility to add new request without existing code modification.
Adapterpattern is used for preparing the cross-platform interface for thread, timer, synchronization, file and data access functionality.
adapterpattern with a unified interface, which could be reused for new platform- and OS- specific transport API adoption
Bridgedesign pattern (PIMPL idiom) for avoiding platform and 3d-party libraries dependencies.
Utils::threads::MessageLoopThreadfor the same data objects processing
Utils::threads::MessageLoopThreadfor avoiding console, file and other appends delay affect on functionality
Controllerdesign pattern with a limited and configurable count of processing threads
utils::SharedPtrtemplate class is implemented for memory deallocation.
utils::AutoLockis implemented for mutex acquiring and releasing
utils::ScopeGuardis implemented for external memory and resource deinitialization.
There are indirect requirements which may impact on Architectural decisions, such as limitation of usage of RAM, ROM, requirements to support specific SDL Core to HMI transport layers. All the requirements of this kind were taken into account while creating Architecture Design.
- FORD Mobile API Spec
- FORD HMI API Spec
- SmartDeviceLink Protocol specification
- HMI Integration Guidelines
- SDL-Core Requirements
- Note: This requirements are handled Luxoft internally and not delivered to open-source.
Architecture prototyping was done to validate architecture on early stages. An evolutional prototyping technique was used. Thus all prototype components were used with non-significant changes and additional features for further development.
List of opened questions and issues is available in sdl_core github repository:
List of Luxoft to Ford opened question is internally available in Luxoft Jira:
- https://adc.luxoft.com/jira/issues/?jql=project=APPLINK AND issuetype=Question AND resolution=Unresolved AND labels=to_discuss ORDER BY key DESC
List of Luxoft internal questions is available in Luxoft Jira:
- https://adc.luxoft.com/jira/issues/?jql=project=APPLINK AND issuetype=Question AND resolution=Unresolved AND labels!=to_discuss ORDER BY key DESC
Not applicable, since no quantitative or qualitative analysis was performed.View on GitHub.com