Pip.Services Logo <br/> Portable Abstractions and Patterns for Dart

This module is a part of the Pip.Services polyglot microservices toolkit. It provides a set of basic patterns used in microservices or backend services. Also the module implemenets a reasonably thin abstraction layer over most fundamental functions across all languages supported by the toolkit to facilitate symmetric implementation.

The module contains the following packages:

  • Commands - commanding and eventing patterns
  • Config - configuration framework
  • Convert - soft value converters
  • Data - data patterns
  • Errors - application errors
  • Random - random data generators
  • Refer - locator (IoC) pattern
  • Reflect - reflection framework
  • Run - execution framework
  • Validate - validation framework

Quick links:

Use

Add this to your package's pubspec.yaml file:

dependencies:
  pip_services3_commons: version

Now you can install package from the command line:

pub get

Then you are ready to start using the Pip.Services patterns to augment your backend code.

For instance, here is how you can implement a component, that receives configuration, get assigned references, can be opened and closed using the patterns from this module.

import 'package:pip_services3_commons/src/config/IConfigurable.dart';
import 'package:pip_services3_commons/src/config/ConfigParams.dart';
import 'package:pip_services3_commons/src/refer/IReferenceable.dart';
import 'package:pip_services3_commons/src/refer/IReferences.dart';
import 'package:pip_services3_commons/src/refer/Descriptor.dart';
import 'package:pip_services3_commons/src/run/IOpenable.dart';

class MyComponentA implements IConfigurable, IReferenceable, IOpenable {
  MyComponentA();

  String _param1 = "ABC";
  int _param2 = 123;
  MyComponentB _anotherComponent;
  bool _opened = true;

  configure(ConfigParams config) {
    this._param1 = config.getAsStringWithDefault("param1", this._param1);
    this._param2 = config.getAsIntegerWithDefault("param2", this._param2);
  }

  setReferences(IReferences refs) {
    this._anotherComponent = refs.getOneRequired<MyComponentB>(
        new Descriptor("myservice", "mycomponent-b", "*", "*", "1.0"));
  }

  isOpen() {
    return this._opened;
  }

  open(String correlationId) {
    return Future(() {
      this._opened = true;
      print("MyComponentA has been opened.");
    });
  }

  close(String correlationId) {
    return Future(() {
      this._opened = true;
      print("MyComponentA has been closed.");
    });
  }
}

Then here is how the component can be used in the code

import 'package:pip_services3_commons/src/config/ConfigParams.dart';
import 'package:pip_services3_commons/src/refer/References.dart';
import 'package:pip_services3_commons/src/refer/DependencyResolver.dart';

MyComponentA myComponentA = MyComponentA();

// Configure the component
myComponentA.configure(ConfigParams.fromTuples([
  'param1', 'XYZ',
  'param2', 987
]));

// Set references to the component
myComponentA.setReferences(References.fromTuples([
   Descriptor("myservice", "mycomponent-b", "default", "default", "1.0",) myComponentB
]));

// Open the component
myComponentA.open("123");

Develop

For development you shall install the following prerequisites:

  • Dart SDK 2
  • Visual Studio Code or another IDE of your choice
  • Docker

Install dependencies:

pub get

Run automated tests:

pub run test

Generate API documentation:

./docgen.ps1

Before committing changes run dockerized build and test as:

./build.ps1
./test.ps1
./clear.ps1

Contacts

The library is created and maintained by Sergey Seroukhov, Levichev Dmitry, Alexey Dvoykin.

The documentation is written by Egor Nuzhnykh, Alexey Dvoykin, Mark Makarychev, Levichev Dmitry.

Libraries

pip_services3_commons