7070
71712 . Technical debt is accumulating, for example inconsistent designs across
7272 modules and feature flags for different behaviors. Here are a few examples:
73-
7473 - Various modules use different registries to manage different types of
7574 artifacts, such as remoting metadata, models, datasources, and middleware.
7675 - Different flavors are used to allow custom logic to intercept
8180
82813 . It is becoming more difficult to add new features or fix bugs as some areas
8382 start to reach the limit of the current design.
84-
8583 - The ` loopback-datasource-juggler ` module is a kitchen sink for many
8684 things, such as typing, data modeling, validation, aggregation,
8785 persistence, and service integration.
9492 make code changes in LoopBack modules. The current version of LoopBack has
9593 ad-hoc extensibility at various layers. Extension points are not
9694 consistently defined. For example,
97-
9895 - Use Express to register middleware.
9996 - Use remoting hooks to intercept remote method invocations.
10097 - Use CRUD hooks to add logic around CRUD operations.
@@ -149,28 +146,24 @@ generation of API creation platform. For more information, read the blog post
149146LoopBack 4's goals are:
150147
1511481 . Catch up with latest and greatest technology advances.
152-
153149 - Adopt [ ES2016/2017] ( http://exploringjs.com/es2016-es2017/index.html ) and
154150 [ TypeScript] ( https://www.typescriptlang.org/ ) for ease of maintenance and
155151 productivity.
156152 - Embrace new standards such as [ OpenAPI Spec] ( https://www.openapis.org/ )
157153 and [ GraphQL] ( http://graphql.org/ ) .
158154
1591552 . Promote extensibility to grow the ecosystem.
160-
161156 - Build a minimal core and enable everything else to be implemented via
162157 extensions.
163158 - Open the door for more
164159 [ extension points and extensions] ( https://github.com/loopbackio/loopback-next/issues/512 ) .
165160
1661613 . Align with cloud native experience for microservices.
167-
168162 - Adopt cloud native microservices by adopting initiatives such as
169163 [ Cloud Native Computing Foundation] ( https://www.cncf.io/ ) .
170164 - Make LoopBack a first-class citizen of the microservices ecosystem.
171165
1721664 . Remove the complexity and inconsistency across modules.
173-
174167 - Use a consistent registry and APIs to manage artifacts and their
175168 dependencies.
176169 - Pay down technical debts by refactoring complex modules.
@@ -227,20 +220,16 @@ Here are the stages we are marching through toward the final version of LoopBack
2272204 as illustrated below.
228221
2292221 . ** Rebase and rewrite the core**
230-
231223 - Leverage TypeScript for better code quality and productivity.
232-
233224 - Provide optional type system for JavaScript.
234225 - Provide planned features from future JavaScript editions to current
235226 JavaScript engines.
236227
237228 - Unify the asynchronous programming model/style.
238-
239229 - 100% promise-based APIs.
240230 - Async/Await as first-class async programming style.
241231
242232 - Implement an IoC Container for better visibility and extensibility
243-
244233 - Universal registry across different modules
245234 - Dependency injection as a pattern to manage dependencies
246235
@@ -249,11 +238,9 @@ Here are the stages we are marching through toward the final version of LoopBack
249238 - Component encapsulates a list of extensions as a whole
250239
2512402 . ** Validate the core design by implementing an REST/HTTP invocation chain**
252-
253241 - Add top-down REST API creation which starts with OpenAPI specs.
254242
255243 - Build sequence of actions for inbound http processing
256-
257244 - Introduce sequence as the composition of actions
258245 - Implement the most critical actions to fulfill the REST API routing and
259246 invocation
@@ -262,7 +249,6 @@ Here are the stages we are marching through toward the final version of LoopBack
262249
263250 Models are the centerpieces of the current LoopBack applications. . They
264251 take multiple responsibilities:
265-
266252 - Data modeling
267253 - Anchor for API related business logic
268254 - Persistence or service invocation
@@ -272,13 +258,11 @@ Here are the stages we are marching through toward the final version of LoopBack
272258
273259 Implement the core functionality of authentication as a component, which
274260 includes:
275-
276261 - Decorators to denote authentication requirement
277262 - ` authenticate ` action to handle authentication
278263 - Extension points for various authentication strategies
279264
2802653 . ** Rebuild our integration and composition capabilities**
281-
282266 - Introduce repositories to represent data access patterns such as CRUD or
283267 Key/Value stores
284268 - Provide a reference implementation of CRUD and KV flavors of repository
@@ -302,7 +286,6 @@ Here are the stages we are marching through toward the final version of LoopBack
302286 approach to describe these artifacts by code (apis and decorators), we would
303287 like to add declarative support so that they can be declared in JSON/YAML
304288 files.
305-
306289 - Define a new domain-specific language (DSL) in JSON/YAML format and
307290 corresponding templates.
308291 - Define the project layout to organize project artifacts.
@@ -314,14 +297,12 @@ Here are the stages we are marching through toward the final version of LoopBack
314297 boot process can be tailored for both tooling and runtime.
315298
3162995 . ** Tooling (CLI & UI)**
317-
318300 - Add CLI and UI tools to:
319301 - Scaffold LoopBack 4 applications
320302 - Manage artifacts such as sequences, actions, controllers, repositories,
321303 services, datasources and models
322304
3233056 . ** Enable cloud native experience**
324-
325306 - Allow controllers to be exposed as gRPC services
326307 - Allow interaction with other gRPC services
327308 - Integration with microservices deployment infrastructure such as Docker
@@ -400,7 +381,6 @@ independent of the nature of such artifacts.
400381
401382- A consistent registry to provide visibility and addressability for all
402383 artifacts.
403-
404384 - Visibility: Each artifact has a unique address and can be accessed via a URI
405385 or key. Artifacts can also be visible at different scopes.
406386
@@ -410,13 +390,11 @@ independent of the nature of such artifacts.
410390 points/extensions decouples providers and consumers.
411391
412392- Ability to compose with dependency resolution.
413-
414393 - Composability: It's common that one artifact to have dependencies on other
415394 artifacts. With dependency injection or service locator patterns, the core
416395 will greatly simplify how multiple artifacts work together.
417396
418397- A packaging model for extensions.
419-
420398 - Pluggability: Extensions can be organized and contributed as a whole. We
421399 need to have a packaging model so that extension developers can create their
422400 own modules as bundles and plug into a LoopBack application.
0 commit comments