Giter Club home page Giter Club logo

commandpipeline's Introduction

CommandPipeline

Build status

Pipeline Pattern is helpful in dividing the problem into smaller reusable code components. This is a simple yet powerful structural pattern to organize a complex logic into smaller reusable components, which can be added/removed/modified independently.

Forces for the Pattern

  • The logic is complex.
  • The simplicity and readability of the code is critical.
  • The logic can be divided into multiple modules.
  • The modules are potentially reusable for different usecases.

Installation

CommandPipeline

Common solution for pipeline processing

You can install CommandPipeline via NuGet:

Install-Package CommandPipeline

CommandPipeline.Ninject

Install it if you want to use Ninject as dependencies resolver for commands

You can install CommandPipeline.Ninject via NuGet:

Install-Package CommandPipeline.Ninject

Example

The complete ready-to-use example is available in the CommandPipeline.Example project

Usage

Create command

public class ExtractHtmlFromUrl : NonParameterizedCommand
{
    public OutArgument<HtmlDocument> HtmlPage { get; set; }

    public InArgument<Request> Request { get; set; }

    public IWebPageDownloader Downloader { get; private set; }

    public ExtractHtmlFromUrl(IWebPageDownloader downloader)
    {
        this.Downloader = downloader;
    }

    public override void Execute()
    {
        var request = Ensure.That(this.Request, "Request").Is(p => p.IsNotNull());

        var webPage = this.Downloader.DownloadWebPage(request.Url);

        var htmlPage = new HtmlDocument { Content = webPage };

        this.HtmlPage.Set(htmlPage);
    }
}

Create container

var container = new NinjectContainer();

container.Bind<IWebPageDownloader>().To<WebPageDownloader>();
container.Bind<IMarkdownConveter>().To<MarkdownConveter>();
container.Bind<IDataContainerService>().To<DataContainerServiceFake>();

Create and update context with your data (optional)

var context = new ParametersContext<ICommand>();

context.Set<ExtractHtmlFromUrl, Request>(x => x.Request, new Request { Url = link });

Create pipeline

builder = new PipelineBuilder()

var pipeline = builder.Create(container, context)
    .Register<ExtractHtmlFromUrl>()
    .Register<ConvertHtmlToMardown>()
    .Register<UploadToDataContainer>();

Handle it

pipeline.Handle();

commandpipeline's People

Contributors

forcewake avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.