Wolk Software Engineering

A group of young and ambitious people dedicated to creating cutting-edge applications in combination with beautiful and functional design.

Read this first

Implementing SOLID and the onion architecture in Node.js with TypeScript and InversifyJS

In this article, we are going to describe an architecture known as the onion architecture. The onion architecture is a software application architecture that adheres to the SOLID principles. It uses the dependency injection principle extensively, and it is profoundly influenced by the Domain Driven Design (DDD) principles and some functional programming principles.

 Prerequisites

The following section describes some software design principles and design patterns that we must learn to be able to understand the onion architecture.

 The separation of concerns (SoC) principle

Concerns are the different aspects of software functionality. For instance, the “business logic” of software is a concern, and the interface through which a person uses this logic is another concern.

The separation of concerns is keeping the code for each of these concerns separated. Changing the interface should not...

Continue reading →


A Look Ahead: Web Development Predictions

In this post, I would like to share some predictions about the world of web development. Making predictions is dangerous because there are high chances that they will be wrong. However, I enjoy thinking about the future because it is exciting and it can help us to identify potential future career opportunities. Remember that all innovations start as a fantasy.

Over the past couple of years, I’ve been reading some blog post and announcements as well as observed some of the breakthrough technologies in the world of web development, DevOps and cloud computing spaces and I’m starting to being able to envision how the world of web development could look like in a decade from now. These are some of the most significant changes in the world of web development that I can envision right now. Please note that these predictions are not based on formal research, and it is just pure speculation.

...

Continue reading →


My new book has just been released! Here is how I did it and how you can do the same

My new book, Learning TypeScript 2.x, has just been released!

I’m not going to talk about the book contents in this post because you can learn everything about it at www.learningtypescript.com. However, I would like to talk about the behind the scenes process of how this book became a reality.

In this article I’m going to answer the following questions:

  • How did I end up writing a technical book?

  • What is involved in writing a technical book?

  • Is the effort of writing a technical book worth?

  • How can you write a technical book?

I decided to write this post because I think it could be useful for some aspiring authors. Let’s get started!

 How did I end up writing a technical book?

In this section, I will try to provide you with some background information that explains how I ended up being highly involved with TypeScript and receiving an offer to write a technical book about it.

 My

...

Continue reading →


The most important practical lesson that JavaScript has taught us

The incredible rise in popularity that JavaScript has experienced over the last decade has been spectacular. According to the yearly developer survey by StackOverflow [1], JavaScript is today the most popular programming language in the world:

JavaScript also leads the ranks in other studies and surveys like the quarterly Programming Language Rankings by Redmonk [2] or the 2018 Developer Skills Report by HackerRank [3]:

The success of JavaScript has been so spectacular that we even have a “law” about it [4]:

Any application that can be written in JavaScript, will eventually be written in JavaScript.

However, the success of JavaScript has not been free of detractors. JavaScript has been the source of inspiration for some well-known jokes:

JavaScript has been the focus of a lot of negative criticism, It has even been described by some as “a phenomenon of mass psychosis” [5]:

...

Continue reading →


Learn how to contribute to the TypeScript compiler on GitHub through a real-world example

A few days ago I managed to send my first PR to the TypeScript project on GitHub. This is something that I’ve been trying to do for a very long time but unfortunately, it felt way too complicated for me.

I decided to write this post because I’m 100% sure that there are a lot of people out there feeling just like me. I’m going to try to describe how I personally found a way to contribute. My goal is to hopefully help others to contribute as well.

Please note that I’m not an expert in the TypeScript compiler internals. Please correct me using the comments below if I say is wrong.

 Prerequisites

I’m going to assume a few things in this article:

  • You understand Git and have already installed it on your machine.
  • You understand TypeScript and have been using it for a while.
  • You understand the GitHub Flow and you already have a GitHub account.

 A real-world example

I’m going to use a...

Continue reading →


Dependency injection in TypeScript applications powered by InversifyJS

 About

InversifyJS is a lightweight inversion of control (IoC) container for TypeScript and JavaScript apps. InversifyJS uses annotations to identify and inject its dependencies.

The InversifyJS API had been influenced by Ninject and Angular and encourages the usage of the best OOP and IoC practices.

InversifyJS has been developed with 4 main goals:

  1. Allow JavaScript developers to write code that adheres to the SOLID principles.

  2. Facilitate and encourage the adherence to the best OOP and IoC practices.

  3. Add as little runtime overhead as possible.

  4. Provide a state of the art development experience.

 Motivation and background

Now that ECMAScript 2015 version of JavaScript supports classes and that TypeScript brings static types to JavaScript application, the SOLID principles have become more relevant than ever before in the development of JavaScript applications.

InversifyJS was...

Continue reading →


How to create your own TypeScript type definition files (.d.ts) and contribute to DefinitelyTyped on GitHub

 Learn how to create your own type definition files and how to contribute to the TypeScript community at DefinitelyTyped

 Helping your community is AWESOME

It is Saturday evening and it’s raining a lot in Ireland. So I decided to spend some time on Twitter looking for interesting TypeScript news. Over the last year I’ve been using the @DubTypeScript account to share TypeScript news. This is the official account of the Dublin TypeScript Meetup which is based in Dublin (Ireland) and is organized by myself.

I was searching for interesting tweets when I found the following one:

Screen Shot 2016-10-15 at 19.19.45.png

When I saw this tweet I was automatically thrilled because it is AWESOME when you find an opportunity to help the community like this.

I really think it is sad that only a small percentage of all the software engineers out there contribute to open source. Contributing to open source is not easy for newcomers...

Continue reading →


The rise of functional programming & the decline of Angular 2.0

 Learn why we believe that the rise of functional programming (FP) will prevent Angular 2.0 from being as successful as its predecessor.

hbnratu2blpova.png

Angular 2.0 RC.5 was just released last week and is now really close the long-awaited 2.0 release.

After the success of Angular 1.0, it is normal to expect a huge success for Angular 2.0. However, we feel that there are reasons to believe that Angular 2.0 will not be as successful as its predecessor.

We believe this because we have been observing the front-end development trends and we have noticed a significant shift within the JavaScript community.

Let’s learn what this “shift” is about.

Note: JavaScript transpilers like Babel, TypeScript or Elm are out of the scope of this article. But you should really try Elm.

 A little bit of history

JavaScript is a multi-paradigm programming language. On its early days, it was mostly used as a scripting...

Continue reading →


Dependency injection in React powered by InversifyJS

 Most of the solutions for dependency injection (DI) in React components are based on context. The famous connect function and the Provider there use the context. However, the React development team recommends avoiding the usage of the context. In this article we will learn how we can use InversifyJS as a context-free solution for DI in React applications.

 Introduction

A few weeks ago, an user in Twitter asked Michel Weststrate (the author of MobX) the following:

Untitled.png

His answer was the following:

Untitled2.png

Later, the popular repository react-in-patterns documented the most common dependency injection patterns in React applications but some developers mentioned InversifyJS once more:

Untitled.png

I was surprised after reading the following in react-in-patterns:

Most of the solutions for dependency injection in React components are based on context. I think that it’s good to know what happens under the...

Continue reading →


Announcing InversifyJS 2.0.0 Release Candidate ?

Learn what’s new in InversifyJS 2.0.0 and what can you expect to see in the future of this powerful lightweight IoC container for JavaScript and Node.js apps powered by TypeScript

687474703a2f2f692e696d6775722e636f6d2f303473443733522e6a7067.jpg

As many of the readers of this blog already know, over the past year and a half we have been working on InversifyJS.

InversifyJS is a powerful lightweight IoC container for JavaScript and Node.js written in TypeScript.

Last march we announced that we were working on InversifyJS 2.0. Today we are happy to announce that InversifyJS 2.0 release candidate is available on npm.

In this post we are going to learn about the following:

  • Setting up InversifyJS 2.0 with TypeScript
  • The InversifyJS 2.0 API
  • The InversifyJS 2.0 features
  • The InversifyJS ecosystem
  • The InversifyJS community

Let’s get started!

 Setting up InversifyJS 2.0 with TypeScript

$ npm install inversify@2.0.0-beta.5 reflect-metadata --save
$ npm
...

Continue reading →