Giter VIP home page Giter VIP logo

mvusharp's Introduction

MvuSharp: Model-View-Update framework for C#

Gitter

This is my attempt to create a cross-platform framework for developing any type of C# application using the Model-View-Update pattern aka the Elm architecture. Although the main features already work, it is still experimental and the API is continually changing, so DO NOT USE IT IN PRODUCTION!

This project was originally based on Elmish, and also manages impure behaviors through a variant of the Mediator/Service-Locator Pattern you can find on MediatR.

mvusharp's People

Contributors

rglezg avatar

Watchers

 avatar

mvusharp's Issues

Nested components

MVU# must provide a standard way of nesting reusable components. A starting point could be the Elmish help page. However, as showed in this article, there are many patterns for implementing parent-child communication.

RequestHandler validation

In theory, a RequestHandler should only be a proxy between the application bussiness logic (pure) and a single method of an extern library (impure). In that sense, a RequestHandler shouldn't have more than one service injected by constructor. Should MVU# validate that? There are any cases in wich a RequestHandler must depend on more than one service?

Built-in navigation

MVU# must allow issuing navigation from the Update function, but as this is dependant on the view engine, so we have to find a way to abstract it and make the platform speciffic implementation in each adapter.

Subscriptions

Elmish allows sending messages from other sources than the UI (timers, websockets, etc) throgh subscriptions. MVU# must support that too.

AggregateRequestHandler implementation details

I have added a special RequestHandler called AggregateRequestHandler for implementing reusable Handlers. In other words: a piece of logic involving many calls to Mediator.SendAsync that can be extracted as a single Request for simplifying testing of Update functions depending on it. The AggregateRequestHandler should have only one injected service: an IMediator instance. The current implementation of this is inelegant and not tested. We must check that.

Naming of concepts

This framework is based on Elmish and MediatR, so I gave core concepts the same names they have in those libraries. This would make easier for developers familiarized with them to learn how to use this. However, in some cases it could be missleading, as MVU# doesn't copy exactly the functionalities and conventions of Elmish and MediatR.
With that in mind, should we keep the original names?

Support EntityFramework Core

EF Core is the standard ORM for .NET so MVU# must work well with it. We probably don't need to change anything to make it work, but as EF Core is imperative and relies in mutability, we must provide some guidelines on how to use it in MVU# using inmutable records as entities.

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.