Visual Studio 2019

You can now run MDriven Framework in Visual Studio 2019.

It will work in Community, Professional and Enterprise editions.

The same install will work in VS2019, VS2017 and VS2015. With this release we deprecate earlier VS-versions.

Who is MDriven Framework for? It is for developers that focus on Problem-Formulation rather than coding. The main challenge in digitalization is not writing code – it is problem formulation – to actually understand how you as a developer can help by bringing information technology to any situation.

Problem formulation in a domain that is open for improvement via application of information technology will be a cyclic and hopefully never ending task – you can always improve. To deliver value in this environment without getting caught up in old fashioned coding issues you will find that MDriven is a really good partner.

By allowing you to formulate the problem with models – instead of text – you can bridge the gap between humans and computers in an unprecedented way. The models built with MDriven transforms into the artifacts needed by current technology automatically and in seconds. This way you and your team can stay in the loop of constant problem formulation – not wasting time in realization of a solution for a known problem (traditional coding).

Actually very cool…

New Template and full circle in 20min

New video out:

It shows a new MDriven Framework Template – that creates a WPF wecpof app in no time.

This app than connects to a MDriven Turnkey server that expose some Rest interfaces.

You can act on local data with c# code.

We then show how you can upload data to the server again.

This is great for when you have the need for any kind of side work that you want to spawn to a satellite system. The reasons may vary but we have seen clients that convert heave 3D models, scan blobs for Viruses, Convert odt reports to pdf, Image analysis and rendering – you might have a need and if you do here you are!

Serialization

MDriven has a clear separation between the application tier and the persistence tier. These tiers are commonly put on different network hosts. And when they are on different hosts we need to communicate between them over the network.

This network communication will include request for:

  • Searches in persistence storage
  • Access to object content of specific objects
  • Finding if anything has changed since last
  • Updates of changed objects
  • Group fetch given ViewModel knowledge

These different needs has different details in their requests and responses – and it all boils down to an api that use a strongly typed object graph of data.

20 years ago we might have used Remote Procedure Calls to implement this, or maybe DCOM, but then Microsoft came up with Windows Communication Foundation – WCF. The good thing about WCF was that it was very configurable – meaning that you had the basic need set up – the api to communicate over – and then you could use configuration files to control the technical aspects of HOW the transport from point A to B should be done.

WCF sounded great and we started to use that 2009. It allowed us to have 1 implementation and still be flexible to let you decide if the transport should be over TCP or HTTP or HTTPS and if the traffic should be encrypted etc.

Now it is almost 2019 and .net Standard and .net Core are hot topics. The world has consolidated around REST style communication over HTTPS and no one really thinks very much on the need for something else. Why bother add configurability to something that always will be the same? This is probably the reason why Microsoft now ditches WCF and does not move it along into .net Standard whole heartedly (you can call WCF services, but you cannot implement a WCF service with .net Standard 2.03).

MDriven now needs a new way to communicate and that way is WebAPI over HTTPS – this is where the industry is today and we gladly follow.

But the technical aspect of communicating from point A to B is not very exciting. As long as it is secure and not slow – it can be anything.

The interesting part is really how we fold down the object-graph we need to send into to a transportable stream. This is called SERIALIZATION.

The standard way to serialize parameters to and answers from WebAPI services is JSON, but there are also other hot implementations on how to serialize data like Googles protobuf.

When implementing MDrivens new serialization format we had to make the choice on what serialization format to use.

We did not choose JSON and this is why:

  • Data type precision loss – byte, int32, int64 all translate to Integer – that then desterilizes back to int64 (same problem with float types). This causes a lot of problems in downstream handling of data – the types are there for a reason and we need to keep the precision. We could invent wrapper objects to keep type fidelity but that would defy the purpose of JSON.

We did not choose protobuf and this is why:

  • Limited support for untyped transport – List<object> is not handled even if object is a well known type (like int or datetime). This is problematic for us since we follow the UML model that you have created – and for us a class has a list of attributes that can be of any type – as long as you have a AttributePersistenceMapper that knows how to store it. We could treat the transport format as the persistence format – but today we defer persistence knowledge to the persistence tier so we need to be able to “just get the object content over the wire” so that we can interpret how a chosen persistence mapper should persist the values.

The thing that is left is to use the DataContractSerializer – this is actually the same serializer that is used by WCF – so as it turns out everything change and still stay the same.

To use WebAPI communication instead of WCF you use the new PersistenceMapperWEBAPIClient (MDriven.Net.Http.dll) instead of PersistenceMapperWCFClient. And on the server you subclass the public abstract class MDrivenPersistenceController<T> : ApiController (MDriven.Persistence.WebApi.dll).