Do you want to pick up from where you left of?
Take me there

Projects Ομπρέλας

Μερικές φορές ένα project μπορεί να γίνει μεγάλο, ή και πολύ μεγάλο. Το εργαλείο χτισίματος Mix μας επιτρέπει να χωρίσουμε τον κώδικά μας σε πολλαπλές εφαρμογές και να κάνουμε τα Elixir projects μας πιο διαχειρίσιμα καθώς μεγαλώνουν.

Πίνακας περιεχομένων

Εισαγωγή

Για να δημιουργήσουμε ένα project ομπρέλας ξεκινάμε ένα project όπως ένα κανονικό Mix project άλλα του περνάμε τη σημαία --umbrella. Για αυτό το παράδειγμα, θα φτιάξουμε το κέλυφος μιας εργαλειοθήκης εκμάθησης μηχανής. Γιατί εργαλειοθήκη εκμάθησης μηχανής; Γιατί όχι; Αποτελείται από διαφορετικούς αλγορίθμους εκμάθησης και ωφέλιμες συναρτήσεις.

$ mix new machine_learning_toolkit --umbrella

* creating .gitignore
* creating README.md
* creating mix.exs
* creating apps
* creating config
* creating config/config.exs

Your umbrella project was created successfully.
Inside your project, you will find an apps/ directory
where you can create and host many apps:

    cd machine_learning_toolkit
    cd apps
    mix new my_app

Commands like "mix compile" and "mix test" when executed
in the umbrella project root will automatically run
for each application in the apps/ directory.

Όπως μπορείτε να δείτε από την εντολή τερματικού, το Mix μας δημιούργησε ένα μικρό σκελετό project με δύο φακέλους:

Projects παιδιά

Ας μπούμε στο φάκελο machine_learning_toolkit/apps και ας δημιουργήσουμε 3 απλές εφαρμογές με τη χρήση του Mix ως εξής:

$ mix new utilities

* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/utilities.ex
* creating test
* creating test/test_helper.exs
* creating test/utilities_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd utilities
    mix test

Run "mix help" for more commands.


$ mix new datasets

* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/datasets.ex
* creating test
* creating test/test_helper.exs
* creating test/datasets_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd datasets
    mix test

Run "mix help" for more commands.

$ mix new svm

* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/svm.ex
* creating test
* creating test/test_helper.exs
* creating test/svm_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd svm
    mix test

Run "mix help" for more commands.

Θα πρέπει τώρα να έχουμε ένα δέντρο project ως εξής:

$ tree
.
├── README.md
├── apps
│   ├── datasets
│   │   ├── README.md
│   │   ├── lib
│   │   │   └── datasets.ex
│   │   ├── mix.exs
│   │   └── test
│   │       ├── datasets_test.exs
│   │       └── test_helper.exs
│   ├── svm
│   │   ├── README.md
│   │   ├── lib
│   │   │   └── svm.ex
│   │   ├── mix.exs
│   │   └── test
│   │       ├── svm_test.exs
│   │       └── test_helper.exs
│   └── utilities
│       ├── README.md
│       ├── lib
│       │   └── utilities.ex
│       ├── mix.exs
│       └── test
│           ├── test_helper.exs
│           └── utilities_test.exs
├── config
│   └── config.exs
└── mix.exs

Αν αλλάξουμε πίσω στο φάκελο του project ομπρέλας, θα δούμε ότι μπορούμε να καλέσουμε όλες τις τυπικές εντολές όπως η compile. Επειδή τα υπό project είναι απλές εφαρμογές, μπορείτε να μπείτε στους φακέλους τους και να κάνετε όλα τα πράγματα που σας επιτρέπει το Mix.

$ mix compile

==> svm
Compiled lib/svm.ex
Generated svm app

==> datasets
Compiled lib/datasets.ex
Generated datasets app

==> utilities
Compiled lib/utilities.ex
Generated utilities app

Consolidated List.Chars
Consolidated Collectable
Consolidated String.Chars
Consolidated Enumerable
Consolidated IEx.Info
Consolidated Inspect

IEx

Μπορεί να σκεφτείτε ότι η αλληλεπίδραση με τις εφαρμογές θα ήταν λίγο διαφορετική σε ένα project ομπρέλας. Λοιπόν, αν θέλετε το πιστεύετε, έχετε άδικο! Αν αλλάξουμε φάκελο στον γονικό, και ξεκινήσουμε το IEx με την εντολή iex -S mix, μπορούμε να αλληλεπιδράσουμε με όλα τα projects κανονικά. Ας αλλαξουμε τα περιεχόμενα του apps/dataset/lib/datasets.ex για αυτό το απλό παράδειγμα.

defmodule Datasets do
  def hello do
    IO.puts("Γεια, είμαι το Dataset")
  end
end
$ iex -S mix
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

==> datasets
Compiled lib/datasets.ex
Consolidated List.Chars
Consolidated Collectable
Consolidated String.Chars
Consolidated Enumerable
Consolidated IEx.Info
Consolidated Inspect
Interactive Elixir ({{ site.elixir.version }}) - press Ctrl+C to exit (type h() ENTER for help)

iex> Datasets.hello
Γεια, είμαι το Dataset
:ok
Έπιασες λάθος ή θέλεις να συνεισφέρεις στο μάθημα; Επεξεργαστείτε αυτό το μάθημα στο GitHub!