A good way of organizing our code is creating modules. A
module can expose methods and data. But sometimes we don’t want to expose
everything to the outside world.
In C# we can define our method or properties with access
modifiers. And in JavaScript? Is there a way of doing this? The answer is yes.
Let’s see an example:
We start by creating a variable called worker and we will
invoke a function called CreateWorker.
Once we will have the worker, we would like to perform different
jobs (job1, job2).
And it’s not really important what the specific jobs are.
Job1 could be calling a web service. Job2 could be applying a template to the
data returned from the web service.
We are not really concerned about these details at this
point. We will be focused in how we create this worker object that has 2
methods on it (job1 and job2).
We will create another variable called “createWorker”, this
variable will point to a function that will return an object. That object would
contain job1 and job2.
We could implement those functions in line, but we don’t
want to do that. Instead we will create another to variables called "task1" and "task2" that will point to our functions.
This is how we expose "task1" and "task2" from our model.
The object literal syntax will allow us to expose those
functions. We can say that "job1" points to "task1" and "job2" points to "task2".
The top part is our private implementation details. We can
even have private functions that would not be exposed from this object.
In the bottom part, when we return this object is where we
define our public API. Here’s an object that have two methods, job1 and job2.
No one really needs to know what is inside. But if we execute this code we’ll
see that we are executing task1 and task2.
This is called “Revealing Module Pattern”. It’s called
Module, because what we’ve done was encapsulate some code inside of a function.
The general meaning of module in Computer Science and Software Development is
“Collection of components or features that you can put together to perform some
useful work”. We are creating a module in JavaScript by creating a function.
Inside of that function we will build out some things that we can use and
expose to the outside world.
And we can even have some private implementation details.
If we create a variable called workCount that counts the number of times that
task1 and task2 have been invoked.
That’s not something we want to expose to the outside world
and allow them to manipulate it.
It’s just something that we want to use as an internal
implementation detail, and perhaps each time this methods are invoked we will
increment workCount and we will also print out the current value of workCount
inside of each task.
If we run our code.
We can see its incrementing “workCount”. This is a good way
to organise and isolate our code exposing only what needs to be exposed to the
outside world.
No comments:
Post a Comment