Mastering Dart
()
About this ebook
Starting with a discussion about the basic features of Dart, we will dive into the more complicated concepts such as generics, annotation with reflection, errors and exceptions, which will help us improve our code. Moving on, you will learn how and when to create objects and also advanced techniques that will help you execute asynchronous code. You will also learn about the collection framework and how to communicate with the different programs written in JavaScript using Dart.
This book will show you how to add internalization support to your web applications and how i18n and l10n access can be embedded into your code to design applications that can be localized easily. You will be shown how to organize client-to-server communication and how different HTML5 features can be used in Dart. Finally, this book will show you how you can store data locally, break the storage limit, and prevent security issues in your web application.
Related to Mastering Dart
Related ebooks
Dart By Example Rating: 0 out of 5 stars0 ratingsNode Web Development, Second Edition Rating: 0 out of 5 stars0 ratingsMastering JavaScript Rating: 4 out of 5 stars4/5Dart in Action Rating: 0 out of 5 stars0 ratingsLearning Dart - Second Edition Rating: 0 out of 5 stars0 ratingsLearning Dart Rating: 0 out of 5 stars0 ratingsDart Cookbook Rating: 0 out of 5 stars0 ratingsDart Essentials Rating: 0 out of 5 stars0 ratingsMastering Android Application Development Rating: 5 out of 5 stars5/5Gradle for Android Rating: 0 out of 5 stars0 ratingsFlutter for Beginners: An introductory guide to building cross-platform mobile applications with Flutter and Dart 2 Rating: 0 out of 5 stars0 ratingsBeginning Flutter: A Hands On Guide to App Development Rating: 0 out of 5 stars0 ratingsFlutter in Action Rating: 1 out of 5 stars1/5Application Development with Swift Rating: 0 out of 5 stars0 ratingsPrinciples of Programming: Java Level 1 Rating: 0 out of 5 stars0 ratingsRedux in Action Rating: 0 out of 5 stars0 ratingsKotlin In-depth [Vol-II]: A comprehensive guide to modern multi-paradigm language Rating: 0 out of 5 stars0 ratings50 C# Concepts Every Developer Should Know Rating: 0 out of 5 stars0 ratingsFundamentals of Android App Development: Android Development for Beginners to Learn Android Technology, SQLite, Firebase and Unity Rating: 0 out of 5 stars0 ratingsReal-World Next.js: Build scalable, high-performance, and modern web applications using Next.js, the React framework for production Rating: 0 out of 5 stars0 ratingsFront-End Developer Rating: 0 out of 5 stars0 ratingsLearning AngularJS Animations Rating: 4 out of 5 stars4/5Android Studio Development Essentials Rating: 5 out of 5 stars5/5Swift Essentials Rating: 0 out of 5 stars0 ratingsiOS Development with Swift Rating: 0 out of 5 stars0 ratingsLearning Node.js for Mobile Application Development Rating: 0 out of 5 stars0 ratingsObjective-C Programming Nuts and bolts Rating: 0 out of 5 stars0 ratingsAngular JS for Beginners: Your Guide to Easily Learn Angular JS In 7 Days Rating: 2 out of 5 stars2/5Java Web Developer A Complete Guide Rating: 0 out of 5 stars0 ratings
Internet & Web For You
Ultimate guide for being anonymous: Avoiding prison time for fun and profit Rating: 5 out of 5 stars5/5Coding For Dummies Rating: 5 out of 5 stars5/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Podcasting For Dummies Rating: 4 out of 5 stars4/5Six Figure Blogging Blueprint Rating: 5 out of 5 stars5/5How to Be Invisible: Protect Your Home, Your Children, Your Assets, and Your Life Rating: 4 out of 5 stars4/5The Hacker Crackdown: Law and Disorder on the Electronic Frontier Rating: 4 out of 5 stars4/5The Beginner's Affiliate Marketing Blueprint Rating: 4 out of 5 stars4/5No Place to Hide: Edward Snowden, the NSA, and the U.S. Surveillance State Rating: 4 out of 5 stars4/5More Porn - Faster!: 50 Tips & Tools for Faster and More Efficient Porn Browsing Rating: 3 out of 5 stars3/5Cybersecurity All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsGrokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Tor and the Dark Art of Anonymity Rating: 5 out of 5 stars5/5An Ultimate Guide to Kali Linux for Beginners Rating: 3 out of 5 stars3/5Surveillance and Surveillance Detection: A CIA Insider's Guide Rating: 3 out of 5 stars3/5CISM Certified Information Security Manager Study Guide Rating: 4 out of 5 stars4/5Everybody Lies: Big Data, New Data, and What the Internet Can Tell Us About Who We Really Are Rating: 4 out of 5 stars4/5The Gothic Novel Collection Rating: 5 out of 5 stars5/5How to Disappear and Live Off the Grid: A CIA Insider's Guide Rating: 0 out of 5 stars0 ratingsCybersecurity For Dummies Rating: 5 out of 5 stars5/5The $1,000,000 Web Designer Guide: A Practical Guide for Wealth and Freedom as an Online Freelancer Rating: 4 out of 5 stars4/5WordPress For Dummies Rating: 0 out of 5 stars0 ratingsLiving on the Grid: The Fundamentals of the North American Electric Grids in Simple Language Rating: 5 out of 5 stars5/5Coding with AI For Dummies Rating: 1 out of 5 stars1/5How To Start A Profitable Authority Blog In Under One Hour Rating: 5 out of 5 stars5/5The Mega Box: The Ultimate Guide to the Best Free Resources on the Internet Rating: 4 out of 5 stars4/5Content Chemistry: The Illustrated Handbook for Content Marketing Rating: 5 out of 5 stars5/5
Reviews for Mastering Dart
0 ratings0 reviews
Book preview
Mastering Dart - Sergey Akopkokhyants
Table of Contents
Mastering Dart
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Beyond Dart's Basics
Modularity and a namespace
Modularity in software development
Modularity in Dart
Libraries
Functions and closures in different scopes
Naming functions with a variable
Passing a function as an argument to another function
Returning a function as a result of another function
Storing a function in data structures
Closures
Classes and mixins
Types
Classes
Inheritance
Interface
Mixins
Well-designed classes
To be private or not
Variables versus the accessor methods
Inheritance versus composition
Methods and operators
Checking the values of the parameters before using them
Well-designed methods
Summary
2. Advanced Techniques and Reflection
Generics
Raw types
Using generics
Generic types
Generic functions
Errors versus exceptions
Errors
Exceptions
Annotations
Built-in annotations
Deprecated
Override
Proxy
Custom annotations
Reflection
Introspection in action
Reflection in action
Summary
3. Object Creation
Creating an object
A generative constructor
A constructor with optional parameters
A named constructor
A redirecting constructor
A private constructor
A factory constructor
The factory method design pattern
The singleton design pattern
A constant constructor
Initializing variables
Syntactic sugar
Method call
Cascade method invocation
Summary
4. Asynchronous Programming
Call-stack architectures versus event-driven architectures
Call-stack architectures
Event-driven architectures
The Dart VM execution model
Synchronous versus Asynchronous code
Future
Future and Timer
Future and Microtask
Sync the Future class
Future with a value
Future with an error
Delaying the Future class
Zones
Simple zone example
Zone nesting
Zone values
Zone specifications
Interaction between zones
Tracking the zone execution
Isolates
Summary
5. The Stream Framework
Why you should use streams
Single-subscription streams versus broadcast streams
A single-subscription stream
A broadcast stream
An overview of the stream framework API
The Stream class
The validation methods of the Stream class
The search methods of the Stream class
The subset methods of the Stream class
Creating a stream
A new stream from the Future class
A new stream from the Iterable class
A new stream with periodically generated events
A new stream from the transformation pipe
A new stream from StreamController
What does the StreamSubscription class do?
Minimizing access to the Stream class members using StreamView
The Sink and EventSink interfaces
Importance of the StreamConsumer interface
What does the StreamSink class do?
Transforming streams with the StreamTransformer class
Traverse streams with StreamIterator
Summary
6. The Collection Framework
A Dart collection framework
Ordering of elements
The Comparable interface
The Comparator type
Collections and generics
The collection class hierarchy
The Iterable interface
Properties of the Iterable collection
Checking the items of a collection on a condition
The iterate over collection
The search over collection
Creating a new collection
Reducing a collection
Converting a collection
Generating a collection
The Lazy Iterable
The Iterable interface
BidirectionalIterator
The collection classes
List
LinkedList
Set
HashSet
LinkedHashSet
SplayTreeSet
Queue
Map
HashMap
LinkedHashMap
SplayTreeMap
Unmodifiable collections
The unmodifiable list
The unmodifiable map
Choosing the right collection
Summary
7. Dart and JavaScript Interoperation
Interoperation at a glance
The dart:js library
JsObject
JsFunction
JsArray
Type conversion
Direct type conversion
Proxy type conversion
Collection conversion
JsObject and instantiation
JsFunction and the this keyword
Dart with jQuery
How to create a shortcut to jQuery
Why does JProxy need a method call?
How does JProxy invoke jQuery?
An example project
How to get the jQuery version
How to perform actions in jQuery
How to use effects in jQuery
What is the impact on performance?
Summary
8. Internalization and Localization
The key principles
Executable code versus User Interface
Numbers and dates
Messages
Measuring units and currencies
Text input and layout
Formatting date and time
The Intl library
Changing a locale
Formatting numbers
Formatting dates
Internalizing messages
Adding parentheses
Adding gender
Adding select
Creating complex message translations
Bidirectional formatting
Internationalizing your web application
Extracting messages
Using Google Translator Toolkit
Using translated messages
Summary
9. Client-to-server Communication
Communication at a glance
The Internet protocol stack
Hypertext Transfer Protocol
Web server
Standalone HTTP communication via the dart:io library
Standalone HTTP communication via the http package
Web browser HTTP communication via the dart:html library
Web browser HTTP communication via the http package
AJAX polling request
AJAX long polling request
Server-Sent Events
WebSocket
Summary
10. Advanced Storage
Cookies
Web Storage
The Session storage
The Local storage
Web SQL
IndexedDB
Summary
11. Supporting Other HTML5 Features
The notification APIs
When to notify
Preventing repeated notifications
The native drag-and-drop APIs
Draggable content
The drag-and-drop events
Dragging data
Dragging the feedback image
Dragging effects
The drop target
Finishing a drop
Finishing a drag
The geolocation APIs
Determining the current location
Geolocation on maps
Tracking the present location
Canvas
Example – the canvas editor
Beginning with HTML
Moving to the main function
The CanvasWidget component
The ToolSelector widget
The ColorSelector widget
The Tool class
The Pen tool
The Line tool
The Rectangle tool
The Oval tool
How to clear the context
How to preview the context
Summary
12. Security Aspects
Web security
Transport Layer Security and Secure Socket Layer at a glance
The TLS certificate
Securing a server
Securing a client
Attributes of cookies
HTTP Strict Transport Security
Content Security Policy
Cross Origin Resource Sharing versus JSON with padding
CAPTCHA
Security best practices
Summary
Index
Mastering Dart
Mastering Dart
Copyright © 2014 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: November 2014
Production reference: 1131114
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78398-956-0
www.packtpub.com
Cover image by Pratyush Mohanta (<tysoncinematics@gmail.com>)
Credits
Author
Sergey Akopkokhyants
Reviewers
Yan Cui
Predrag Končar
Jana Moudrá
Martin Sikora
Acquisition Editor
Sonali Vernekar
Content Development Editor
Govindan K
Technical Editor
Shashank Desai
Copy Editor
Roshni Banerjee
Project Coordinator
Sageer Parkar
Proofreaders
Simran Bhogal
Maria Gould
Ameesha Green
Paul Hindle
Indexers
Monica Ajmera Mehta
Priya Sane
Graphics
Disha Haria
Abhinash Sahu
Production Coordinator
Shantanu N. Zagade
Cover Work
Shantanu N. Zagade
About the Author
Sergey Akopkokhyants is a software architect with more than 20 years of professional experience in designing and developing client- and server-side applications. He is also a certified Java developer and a project manager. He has general knowledge of many tools, languages, and platforms.
For the past 5 years, Sergey has been responsible for customizing and producing web-oriented applications for wholesale business management solutions projects for several worldwide mobile communication companies. His responsibilities have been architecture design and guidance of client software development using Flex, ActionScript, HTML, JavaScript, TypeScript, Dart, and client-server integration with Java. He is also a founder and active contributor in several open source projects on GitHub, such as Dart Web Toolkit (DWT) and Angular Dart UI.
Sergey is passionate about web design and development and likes sharing his expertise with others, helping them develop their skills and increase their productivity. He has also reviewed the books Learning Dart and Dart Cookbook, both by Packt Publishing.
I would like to thank my wife, Lada, and my parents, Alexander and Tamara, for their constant and invaluable support.
I also wish to express my deep gratitude and appreciation to Jeffrey Johnson for his valuable feedback.
About the Reviewers
Yan Cui is a lead server developer at the award-winning, London-based gaming company, Gamesys. He focuses on building highly distributed and scalable server solutions for Gamesys's social and mobiles games. He is a regular speaker at conferences on topics such as F#, AOP, and NoSQL and is active on his blog at http://theburningmonk.com.
He is the co-author of F# Deep Dives, Manning Publications, and the author of an upcoming book on cross-platform mobile development with F# by Packt Publishing. His Twitter handle is @theburningmonk.
Predrag Končar is a game developer and multimedia researcher. His primary areas of interest are games and combining technology and art. He is also into image and audio processing and interactive design, and he likes to spend his free time painting. In the past 12 years, he has worked as a technical and creative director for many online projects, published over 40 online games, participated in the production of several iOS apps, and also reviewed the books Corona SDK Mobile Game Development Beginner's Guide and Corona SDK Application Design, both by Packt Publishing. He has a strong background in Unity, C#, ActionScript, Lua, MEL script, Maya, and Python. He is a member of Mensa and ACM SIGGRAPH.
Jana Moudrá is a passionate developer and modern web and mobile technologies evangelist. She created her first web page at the age of 10. At that time, she had no idea what her future field of expertise would be. Later, she became interested in technologies such as JavaScript and jQuery, but finally ended up with the Dart programming language. She has been exploring it since Milestone 2 (M2). She is also interested in the area of user experience, design, and Android app development. She cofounded the company Juicymo, where she works on juicy apps and products. When she is not working, she organizes developer-related events on her favorite technologies for the Czech developers' community. You can visit her company's website at http://www.juicymo.cz/en.
Martin Sikora has been professionally programming since 2006 for companies such as Miton CZ and SYMBIO Digital in various languages, mostly PHP. Since 2012, he has been freelancing, working on projects in Python, PHP, Dart, Objective-C, and AngularJS. He is a Zend Certified Engineer and was member of the winning team of Google Dart Hackathon 2012, Prague. Occasionally, Martin writes tutorials at http://www.binpress.com/.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
http://PacktLib.PacktPub.com
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
It's only been a few years since the Dart programming language was born and it has become eminent and well-known not only within Google, but also in the wider community of developers. It has grown into a powerful tool to help developers produce efficient and consistent source code for web clients and standalone and server-side programs. The Dart development team and independent contributors have created some good documentation, so getting started with programming using Dart isn't that hard. You can program within different development environments such as the Eclipse-based Dart Editor; IDE plugins for IntelliJ IDEA and WebStorm; and text editor plugins for Sublime Text 3, Emacs, and Vim.
Actual development on Dart is quite similar to Java, C#, or any other object-oriented languages, so you can have your first short application up and running in a short amount of time. To go further, you can use the tutorials, code labs, and examples on the official Dart website (https://www.dartlang.org/). If you want to improve your level of expertise, you can read through the set of books on Dart that have been published in the last couple of years. You should always bear in mind that creating high-level, secure, and internationally compliant code is more complex than the application created in the beginning.
This book is designed to help you make the most effective use of the Dart programming language, its SDK libraries, and a rich set of publicly available packages. Feel free to refer to any chapter that you need to get more in-depth knowledge about. If you feel you have missed something major, go back and read the earlier chapters. The chapters in the book are arranged in such a way that you can easily learn more in a step by step manner.
I enjoy working with the Dart programming language and am really happy to share my enthusiasm and expertise with you to help you make use of the language in a more effective and comfortable manner.
What this book covers
Chapter 1, Beyond Dart's Basics, helps you take a step further to understand the concept of programming in the Dart language. It shows the best practices to use functions and closures and dives into the world of classes and mixins.
Chapter 2, Advanced Techniques and Reflection, lets you get a firm grasp on how to use generics, errors and exceptions, and annotations, and it takes you through Mirrors of reflection.
Chapter 3, Object Creation, helps you understand how objects can be created and will help you make a right choice that will be useful in different business cases.
Chapter 4, Asynchronous Programming, explores advanced technologies to organize asynchronous code execution. It shows you the best practices of Future, zones, and isolates.
Chapter 5, The Stream Framework, shows you how Dart manages streams. It teaches you how the single-subscription and broadcast streams can be used in different cases and scenarios.
Chapter 6, The Collection Framework, introduces you to the Dart collection frameworks. It shows which data structure of a collection is appropriate in specific cases based on patterns and performance consideration.
Chapter 7, Dart and JavaScript Interoperation, shows you how to use Dart and JavaScript together to build web applications. It lists problems and shows solutions you can use to communicate between Dart and JavaScript and the existing JavaScript program.
Chapter 8, Internalization and Localization, explains you how the i18n and l10n access can be embedded into your code to help you design and develop web applications that enable easy localization for different cultures, regions, and languages.
Chapter 9, Client-to-server Communication, helps you organize and create client-to-server communications. It has the answer on presumably the most important questions about the right choice of libraries and packages in specific scenarios.
Chapter 10, Advanced Storage, explains how can store data locally on a client, break the storage limits, and prevent security issues in your web applications. It will again touch upon cookies and demonstrate how to use Web Storage and the elaborate, more powerful, and more useful IndexedDB to store a large amount of data in the web browser.
Chapter 11, Supporting Other HTML5 Features, introduces you to different HTML5 features such as notifications, native drag-and-drop, geolocation, and canvas.
Chapter 12, Security Aspects, helps you understand the different aspects of security in web applications.
What you need for this book
Any modern PC installed with Windows, Linux, or Mac OS should be sufficient to run the code samples in the book. All the software used in the book is open source and freely available on the Web. The following are the links to the software:
Java (https://java.com/en/download)
Dart (https://www.dartlang.org)
wrk—a HTTP benchmarking tool (https://github.com/wg/wrk)
Who this book is for
If you are a software engineer who has basic or intermediate knowledge of the Dart programming language and have possibly used this language to develop applications earlier, this is the book for you. The book reveals the different ways of developing client- and server-side applications on Dart and includes enough examples for both. For beginners, it will serve as a guide to rapidly accelerate from a novice level to the master level; for intermediate to advanced developers, it will quickly fill in the gaps on Dart.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: The inst variable holds a reference to the original object in the reflectee property.
A block of code is set as follows:
// AssemblyLine.
class AssemblyLine {
// List of items on line.
List _items = [];
// Add [item] to line.
add(item) {
_items.add(item);
}
// Make operation on all items in line.
make(operation) {
_items.forEach((item) {
operation(item);
});
}
}
Any command-line input or output is written as follows:
sudo apt-get install libnss3-tools
New terms and important words are shown in bold. Words that you see on the screen, in menus or dialog boxes for example, appear in the text like this: Expand the Web SQL tree item from the Resources tab to see the Web SQL storage data.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply send an e-mail to <feedback@packtpub.com>, and mention the book title via the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <copyright@packtpub.com> with a link to the suspected pirated material.
We appreciate your help in protecting our authors, and our ability to bring you valuable content.
Questions
You can contact us at <questions@packtpub.com> if you are having a problem with any aspect of the book, and we will do our best to address it.
Chapter 1. Beyond Dart's Basics
Dart is a very young computer language with many interesting features. Dart is a class-based, object-oriented language with optional types, and it can help you write very powerful programs. In this chapter, we will cover the following topics:
Modularity and a namespace
Functions and closures in different scopes
Classes and mixins
Methods and operators
Modularity and a namespace
Complex things are the foundation of our world. To understand the complexity of the things around us, it is necessary to understand the parts that make them up. The evolution of complex things is due to functional and behavioral modularity. Functional modularity is the composition of smaller independent components with clear boundaries and functions. Behavioral modularity is mainly about traits and attributes that can evolve independently.
Modularity is nothing new. Earlier, product manufacturers figured out ways to increase the output and quality of the product, while still managing to reduce the cost pressures. They accomplished this through modularity. Modular design can be seen in automotive industry, buildings, and many other industries. Henry Ford introduced the notion of modularity in his assembly line with standardized and interchangeable parts. As a result, he reduced the production cycles and costs to achieve the mass production of his automobiles. A lot of these concepts are still used by many companies today.
Modularity in software development
Representation of complex things as a set of parts is called decomposition. By analogy, the real-world complex software may be broken into functional parts called modules. Each module can be created, changed, tested, used, and replaced separately.
Let's take a look at the benefits of modularity. For the sake of simplicity, we divide them into development and postproduction phases. Each of these phases has its own specific tasks to be solved in the scope of that phase.
The development phase has the following benefits:
Each module requires less code.
New features or changes can be introduced to modules in isolation, separate from the other modules.
Errors can be easily identified and fixed in a module.
Modules can be built and tested independently.
Programmers writing the modules can collaborate on the same application.
The same modules can be reused in many applications.
Applications have a main module and many auxiliary modules. Each module encapsulates a specific functionality and each one is integrated through loosely coupled communication channels provided by the main module.
The postproduction phase has the following benefits:
Modules kept in a versioning system can be easily maintained and tested
Fixed and noninfrastructural changes in a module can be done without affecting other modules
One significant disadvantage of modularity is that it increases complexity when managing many modules, especially when each one is individually versioned, updated, and has dependencies on the other modules.
Modularity in Dart
The Dart language was designed by keeping the modules in mind. Modularity in Dart is realized through packages, libraries, and classes.
A library exposes functionality as a set of interfaces and hides the implementation from the rest of the world. As a concept, it's very similar