Giter Site home page Giter Site logo

dolittle / bifrost Goto Github PK

View Code? Open in Web Editor NEW
110.0 19.0 38.0 45.26 MB

This is the stable release of Dolittle till its out of alpha->beta stages

License: Other

Shell 0.02% C# 56.09% HTML 0.42% JavaScript 39.26% CSS 3.50% PowerShell 0.01% Batchfile 0.28% F# 0.42% Dockerfile 0.01%
cqrs ddd domain-driven-design event-sourcing eventsourcing eventstore

bifrost's Introduction

IMPORTANT: WE'VE MOVED TO HERE

Source Version
NuGet NuGet
MyGet MyGet
Platform Build Status
Windows AppVeyor Build Status
Linux Travis Build Status

Bifrost Logo

Documentation can be found here

You can find the CI package feed here

Bifrost is a platform designed to build Line of Business applications without sacrificing architectural quality, code quality or scalability. Embracing the concepts of Domain Driven Design, it helps developers and other stakeholders focus on business need and business value, rather than on the more technical aspects of the solution. Built from the ground up, it both embodies as well as encourages best quality engineering practises such as the SOLID principles, Convention Over Configuration and Separation of Concerns. Utilising CQRS, it fits perfectly with the ideas and promises of microservices and promotes the paradigm shift in thinking that can take LOB applications to the Cloud.

Sponsors

alt tag

Site

For more details, samples, documentation, please go to the official site

Contributing

Learn how you can contribute here

bifrost's People

Contributors

alantschudy avatar bifrostdocs avatar bnordli avatar einari avatar gitter-badger avatar jarlef avatar mariusgundersen avatar ocusven avatar pavsaund avatar smithmx avatar sphair avatar svethors avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bifrost's Issues

CommandMetaData for adding data to Commands that does not appear in the clients that issue commands

In many cases you need to have additional information related to a command that does not exist in the client or the client should not be responsible for, for instance if you have a shopping cart and you want to add an item to it and you want it to be added with the current price of the product but don't want the price to come from the client as it can be tampered with. CommandMetaData could then fill this gap.

Bifrost should automatically pick up any classes implementing CommandMetaDataDescriptor or similar for the specific command and make sure it populates the meta-data on the command.

Add support for getting an entity by its Id in EntityContext

Add .Get() method that takes an object as the key. The different implementations should throw an exception if the particular object type is not defined with a key or it has a composite key and it is not able to resolve the key from the single object going in.

Any internal implementations using .Any() or .Where(e => e.Id == id) or similar on the Entities queryable should be optimized to use this new approach.

View.Get() can crash if it is not finding any

The implementation is using a cast after SingleOrDefault().

Look at casting during select instead :

    public T Get(Guid id)
    {
        if( typeof(T).HasInterface<IHaveId>() )
        {
            var queryable = (IQueryable<IHaveId>)Query;
            var instance = (from o in queryable
                            where o.Id == id
                            select o).SingleOrDefault();
            return (T)instance;
        }

        throw new ObjectDoesNotHaveIdException();
    }

    public T Get(Guid id)
    {
        if( typeof(T).HasInterface<IHaveId>() )
        {
            var queryable = (IQueryable<IHaveId>)Query;
            var instance = (from o in queryable
                            where o.Id == id
                            select (T)o)  // LARS: note the addition of (T) cast here
                            .SingleOrDefault();

            return instance;  // LARS: (T) cast not necessary here anymore
        }

        throw new ObjectDoesNotHaveIdException();
    }

Implement Execution Context

A way to hold meta data that will be attached to Commands and Events. This MetaData can typically contain tenant information and in a Web context is built on a per request basis. The MetaData is considered cross cutting through all concerns and can be read out by every aspect of the system, but only assigned by its owning application (IApplication)

Support different formats depending on the content-type

Today we only support JSON in and out of services, I think it would be helpful if we could add XML and also investigate into supporting ProtoBuf

The reasoning behind protocol buffer support is for decreasing the bandwidth used in transferring data back and forth for a client. I think a good idea here would be to have a general service layer that can be configured for what content type to use by default. This basically to improve on developer experience during development. Its easier to look at a JSON response than a protocol buffer one. :)

Finish the Mongo support

The mongo entitycontext is missing some functionality, like Delete.

Also, you can only retrieve all entities of a type at once, while it might have been nice to be able to use mongo specific features like findOne().

SEO : Serverside "rendering" of Single Page Applications

For search engine crawlers that are not capable of executing the JavaScripts needed to render the composed page we need to execute the JavaScripts on the server - basically use something like Env.js and just throw it same URL and let it render everything and then spit out the HTML as a result.

One thing that is very important to make note of is that we need to be able to know when the composition is done - so Bifrost needs to publish a message/event in the DOM when it is done

Support multiple sources of values for service method calls

Today the existing solution for passing values along to method arguments is only using FORM values in the request. This should be refactored into something that uses a value provider model with the opportunity of having multiple providers.
For now the natural ones would be :

  • Form
  • Request parameters

Pack Nuget package for all projects and publish

Root of repository holds a Packages folder, within here there is a folder representing each package. Within each folder, there should be a file by convention holding information about what actual projects (By name) are involved in creating the package. For all the platforms, we will go by convention and get the binaries and put them in to the correct folder within the packages folder structure according to the Nuget convention for packages. Then the build will do a "nuget pack" based on the nuget spec.

When the revision number only changes (continuous build typically), we push the packages to our own nuget server. If the build number or any of the other numbers change (basically the revision is 0), we push to the official nuget repository.

Support multiple navigation containers with history & deepLinking on each

Today the URL that is generated when navigating says : ?feature=[name of feature], it should be more like something :
?navigation={container1:[name of feature],container2:[name of another feature]}

And also work into this parameters for the features themselves for the loaded() function that should be supported

Cross cutting distributed caching mechanism

Design a cross cutting caching mechanism that can be used for caching entities, especially designed for EntityContext, but not tied into specifics of how caching is done for concrete implementations such as nHibernate or others.

Figure out a good design that makes it possible to have one way of enabling caching across the board for EntityContext and Views

Swap out Juicer with other tool for concatenation of Bifrost JS

When the js files aren't in ANSI format, the resulting concatenated file get's some strange encoding marks.

This works fine with production code, but plays havoc when testing with jstestdriver / forseti.

Could be the runner, or could be the testing-framework (jasminebdd), but it certainly makes for some strange issues :)

When navigating in JavaScript frontend - order of applying binding contexts are wrong

Lets say you have a main page that handles all navigation, within it it binds a to a property for feature using the feature bindingHandler.

Within the features it navigates to, there are compositions that include other features, these will get initialized in the correct order when hitting the first time, but any subsequent navigation within memory will not guarantee the ordering of initialization for the binding contexts (ViewModels)

Make the committing of a UnitOfWork / CommandContext async

When a command has gone through an event source and is ready to be committed, the client should be blissfully unaware of what happens next and we can return to the client from this point. By then making the commit async, we can return directly and just keep on processing on the server.

Build and publish documentation

Build the DocumentX project and publish the resulting HTML to the Bifrost Pages and also the CHM file for downloading from somewhere

visualStateManager - handling of visual states

Similar to what is in Silverlight, a manager for handling visual states :

<div data-visualstatemanager="[configuration]">
    <div data-visualstate="[name of state]">
    </div>
    <div data-visualstate="[name of state]">
    </div>
</div>

Configuration will contain information about all the states and configuration related to them, such as transitions between states. Animations and such.

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.