Skip to content

Commit 4420eb0

Browse files
author
Steve Thompson
committed
refactored PublicArray to not use dependency injection in constructor,
but instead use lazy-loading, instantiating a property only when that property is accessed.
1 parent e519ac7 commit 4420eb0

File tree

4 files changed

+63
-78
lines changed

4 files changed

+63
-78
lines changed

dist/privy/PublicArray.js

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,14 @@ var array_append_prepend_1 = require("@writetome51/array-append-prepend");
1717
var set_array_1 = require("@writetome51/set-array");
1818
var di_factory_1 = require("@writetome51/di-factory");
1919
var public_array_content_1 = require("@writetome51/public-array-content");
20-
/*********************
21-
These imports are commented out to help improve performance.
22-
They're still kept here as a record of the npm module each comes from.
23-
24-
// import { PublicArrayRemover } from '@writetome51/public-array-remover';
25-
// import { PublicArrayGetter } from '@writetome51/public-array-getter';
26-
// import { PublicArrayInserter } from '@writetome51/public-array-inserter';
27-
// import { PublicArraySorter } from '@writetome51/public-array-sorter';
28-
// import { PublicArrayReplacer } from '@writetome51/public-array-replacer';
29-
// import { PublicArrayGetterConverter } from '@writetome51/public-array-getter-converter';
30-
// import { PublicArrayGetterRemover } from '@writetome51/public-array-getter-remover';
31-
// import { PublicArrayFilter } from '@writetome51/public-array-filter';
32-
********************/
20+
var public_array_filter_1 = require("@writetome51/public-array-filter");
21+
var public_array_getter_converter_1 = require("@writetome51/public-array-getter-converter");
22+
var public_array_getter_1 = require("@writetome51/public-array-getter");
23+
var public_array_getter_remover_1 = require("@writetome51/public-array-getter-remover");
24+
var public_array_inserter_1 = require("@writetome51/public-array-inserter");
25+
var public_array_remover_1 = require("@writetome51/public-array-remover");
26+
var public_array_sorter_1 = require("@writetome51/public-array-sorter");
27+
var public_array_replacer_1 = require("@writetome51/public-array-replacer");
3328
/***********************
3429
This class is for general array manipulation. It's called PublicArray because it
3530
contains an array in a public property: 'data' .
@@ -48,6 +43,7 @@ var PublicArray = /** @class */ (function (_super) {
4843
__extends(PublicArray, _super);
4944
// Public Properties:
5045
// readonly copy: PublicArray (an independent copy of this instance).
46+
// Lazy-Loading is used to instantiate these properties:
5147
// readonly filter: PublicArrayFilter;
5248
// readonly getConverted: PublicArrayGetterConverter;
5349
// readonly get: PublicArrayGetter;
@@ -56,37 +52,30 @@ var PublicArray = /** @class */ (function (_super) {
5652
// readonly remove: PublicArrayRemover;
5753
// readonly replace: PublicArrayReplacer;
5854
// readonly sort: PublicArraySorter;
59-
function PublicArray(
60-
// begin injected dependencies...
61-
_filter, // PublicArrayFilter,
62-
_getConverted, // PublicArrayGetterConverter,
63-
_get, // PublicArrayGetter,
64-
_getAndRemove, // PublicArrayGetterRemover,
65-
_insert, // PublicArrayInserter,
66-
_remove, // PublicArrayRemover,
67-
_replace, // PublicArrayReplacer,
68-
_sort, // PublicArraySorter,
69-
// ... end injected dependencies
70-
data // the actual array, represented by inherited property this.data
55+
function PublicArray(data // the actual array, represented by inherited property this.data
7156
) {
7257
if (data === void 0) { data = []; }
7358
var _this = _super.call(this, data) || this;
74-
_this._filter = _filter;
75-
_this._getConverted = _getConverted;
76-
_this._get = _get;
77-
_this._getAndRemove = _getAndRemove;
78-
_this._insert = _insert;
79-
_this._remove = _remove;
80-
_this._replace = _replace;
81-
_this._sort = _sort;
8259
_this._createGetterAndOrSetterForEach(
83-
// each of these is a public property:
84-
['filter', 'getConverted', 'get', 'getAndRemove', 'insert',
85-
'remove', 'replace', 'sort'], {
60+
// each of these represents a public property:
61+
[
62+
{ name: 'filter', class: public_array_filter_1.PublicArrayFilter },
63+
{ name: 'getConverted', class: public_array_getter_converter_1.PublicArrayGetterConverter },
64+
{ name: 'get', class: public_array_getter_1.PublicArrayGetter },
65+
{ name: 'getAndRemove', class: public_array_getter_remover_1.PublicArrayGetterRemover },
66+
{ name: 'insert', class: public_array_inserter_1.PublicArrayInserter },
67+
{ name: 'remove', class: public_array_remover_1.PublicArrayRemover },
68+
{ name: 'replace', class: public_array_replacer_1.PublicArrayReplacer },
69+
{ name: 'sort', class: public_array_sorter_1.PublicArraySorter }
70+
], {
8671
get_getterFunction: function (property) {
72+
// Lazy-Loading is used to instantiate these properties:
73+
if (!(_this["_" + property.name])) { // if property not set...
74+
_this["_" + property.name] = di_factory_1.DIFactory.getInstance(property.class);
75+
}
8776
return function () {
88-
_this["_" + property].data = _this.data;
89-
return _this["_" + property];
77+
_this["_" + property.name].data = _this.data;
78+
return _this["_" + property.name];
9079
};
9180
}
9281
});

dist/tests.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
"use strict";
22
Object.defineProperty(exports, "__esModule", { value: true });
33
var index_1 = require("./index");
4-
/*******************
5-
let arr: any = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
6-
arr.splice(10, 0, [1]);
7-
console.log(arr);
8-
*****************/
94
var arr = index_1.getPublicArray([1, 2, 3, 4, 5, 6, 7, 8, 9]);
105
// Test 1: getPublicArray() must return instance of PublicArray:
116
if (arr.className && arr.className === 'PublicArray')

lib/privy/PublicArray.ts

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,14 @@ import { append, prepend } from '@writetome51/array-append-prepend';
22
import { setArray } from '@writetome51/set-array';
33
import { DIFactory } from '@writetome51/di-factory';
44
import { PublicArrayContent } from '@writetome51/public-array-content';
5-
/*********************
6-
These imports are commented out to help improve performance.
7-
They're still kept here as a record of the npm module each comes from.
8-
9-
// import { PublicArrayRemover } from '@writetome51/public-array-remover';
10-
// import { PublicArrayGetter } from '@writetome51/public-array-getter';
11-
// import { PublicArrayInserter } from '@writetome51/public-array-inserter';
12-
// import { PublicArraySorter } from '@writetome51/public-array-sorter';
13-
// import { PublicArrayReplacer } from '@writetome51/public-array-replacer';
14-
// import { PublicArrayGetterConverter } from '@writetome51/public-array-getter-converter';
15-
// import { PublicArrayGetterRemover } from '@writetome51/public-array-getter-remover';
16-
// import { PublicArrayFilter } from '@writetome51/public-array-filter';
17-
********************/
5+
import { PublicArrayFilter } from '@writetome51/public-array-filter';
6+
import { PublicArrayGetterConverter } from '@writetome51/public-array-getter-converter';
7+
import { PublicArrayGetter } from '@writetome51/public-array-getter';
8+
import { PublicArrayGetterRemover } from '@writetome51/public-array-getter-remover';
9+
import { PublicArrayInserter } from '@writetome51/public-array-inserter';
10+
import { PublicArrayRemover } from '@writetome51/public-array-remover';
11+
import { PublicArraySorter } from '@writetome51/public-array-sorter';
12+
import { PublicArrayReplacer } from '@writetome51/public-array-replacer';
1813

1914

2015
/***********************
@@ -35,10 +30,21 @@ import { PublicArrayContent } from '@writetome51/public-array-content';
3530

3631
export class PublicArray extends PublicArrayContent {
3732

33+
private _filter; // PublicArrayFilter
34+
private _getConverted; // PublicArrayGetterConverter
35+
private _get; // PublicArrayGetter
36+
private _getAndRemove; // PublicArrayGetterRemover
37+
private _insert; // PublicArrayInserter
38+
private _remove; // PublicArrayRemover
39+
private _replace; // PublicArrayReplacer
40+
private _sort; // PublicArraySorter
41+
3842

3943
// Public Properties:
4044

4145
// readonly copy: PublicArray (an independent copy of this instance).
46+
47+
// Lazy-Loading is used to instantiate these properties:
4248
// readonly filter: PublicArrayFilter;
4349
// readonly getConverted: PublicArrayGetterConverter;
4450
// readonly get: PublicArrayGetter;
@@ -50,31 +56,32 @@ export class PublicArray extends PublicArrayContent {
5056

5157

5258
constructor(
53-
// begin injected dependencies...
54-
private _filter, // PublicArrayFilter,
55-
private _getConverted, // PublicArrayGetterConverter,
56-
private _get, // PublicArrayGetter,
57-
private _getAndRemove, // PublicArrayGetterRemover,
58-
private _insert, // PublicArrayInserter,
59-
private _remove, // PublicArrayRemover,
60-
private _replace, // PublicArrayReplacer,
61-
private _sort, // PublicArraySorter,
62-
// ... end injected dependencies
63-
6459
data = [] // the actual array, represented by inherited property this.data
6560
) {
6661

6762
super(data);
6863

6964
this._createGetterAndOrSetterForEach(
70-
// each of these is a public property:
71-
['filter', 'getConverted', 'get', 'getAndRemove', 'insert',
72-
'remove', 'replace', 'sort'],
65+
// each of these represents a public property:
66+
[
67+
{name: 'filter', class: PublicArrayFilter},
68+
{name: 'getConverted', class: PublicArrayGetterConverter},
69+
{name: 'get', class: PublicArrayGetter},
70+
{name: 'getAndRemove', class: PublicArrayGetterRemover},
71+
{name: 'insert', class: PublicArrayInserter},
72+
{name: 'remove', class: PublicArrayRemover},
73+
{name: 'replace', class: PublicArrayReplacer},
74+
{name: 'sort', class: PublicArraySorter}
75+
],
7376
{
7477
get_getterFunction: (property) => {
78+
// Lazy-Loading is used to instantiate these properties:
79+
if (!(this[`_${property.name}`])) { // if property not set...
80+
this[`_${property.name}`] = DIFactory.getInstance(property.class);
81+
}
7582
return () => {
76-
this[`_${property}`].data = this.data;
77-
return this[`_${property}`];
83+
this[`_${property.name}`].data = this.data;
84+
return this[`_${property.name}`];
7885
};
7986
}
8087
}

lib/tests.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@ import { getPublicArray } from './index';
22
import { arraysMatch } from '@writetome51/arrays-match';
33

44

5-
/*******************
6-
let arr: any = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
7-
arr.splice(10, 0, [1]);
8-
console.log(arr);
9-
*****************/
10-
115
let arr = getPublicArray([1, 2, 3, 4, 5, 6, 7, 8, 9]);
126

137
// Test 1: getPublicArray() must return instance of PublicArray:

0 commit comments

Comments
 (0)