Читать книгу Programming Kotlin Applications - Бретт Мак-Лахлин, Brett McLaughlin - Страница 54
Organize Your Classes with Packages
ОглавлениеWhile it's great that you've got Person
separate from the test main
function, you've still not really solved the original problem: class organization. If having all your classes in one file is a pain, then by extension, so is having all your classes in a single directory.
What you really want is to organize your classes by functionality. So let's assume that you want your Person
class, but you also think you might later want some specific types of people; maybe a Mother
class or a Child
class. Suppose you're building software to model a genealogy, for example.
In that situation, you really want your classes related to Person
grouped together. But you might also have some classes related to the customer, with their account information: username, password, email. These aren't instances of Person
, they're (perhaps) instances of a User
. You might even have a UserPreferences
class at some point, too, letting you store that user's information. So that might all belong to a group of classes related to User
.
Kotlin—and many other languages—use the concept of packages to provide this organization. A package is just a logical grouping of classes, with a particular namespace: some way to prefix and identify classes as being related. You could have a person
package with Person
, Mother
, Father
, and so forth, and a user
package with User
, UserPreferences
, and the like.
Naming your package is important, though, so a few best practices:
Packages should begin with lowercase letters. Use person instead of Person. (Classes begin with capitals; packages with lowercase.)
Start the package with a dot-separated name that identifies the organization, like org.wiley or com.myCodeShop.
If you might use languages other than Kotlin, you may want to also add kotlin as part of the package name, to distinguish the package from other code (such as Java).
Put all this together and separate the pieces with a dot delimiter (.). For this book, the package will usually be org.wiley.kotlin.[general category]
. Person
will be in org.wiley.kotlin.person
and User
will be in org.wiley.kotlin.user
.
NOTE You don't always have to have the last part of the package name (like person
) match a class in that package (like Person
). You might have an org.wiley.kotlin.sport
package that has various sports-related classes like Football
, Baseball
, Hockey
, and Volleyball
, but not have an actual Sport
class. It really depends on your own preferences and style.