0xSina
0xSina

Reputation: 21553

Backbone.js directory structure

New to Javascript/Backbone. I am wondering what's the 'convention' in Backbone when setting up directory structure.

I have a Backbone.js app that has two main 'entry' points. One is Admin (admin.mydomain.com), and other is User (user.mydomain.com). Now I am confused about how to name the files/directories.

In particular, is it better to do this:

-views
--admin
----items.js
--user
----items.js

-templates
--admin
----items.html
--user
----user.html

--models
--collections

or

-admin
--views
----item.js
--templates
----item.html

-user
--views
----item.js
--templates
----item.html

--models
--collections

Also, if I have a directory with 2 routers, and I don't want to create 2 seperate directories just to house 1 file in each just to seperate them, how should I name them? For example, I have a directory routers which contains two files, a router for admin, and router for user. Should I have:

Also, when is preffered to name a file admin.router.js or admin-router.js ?

Thanks!

Upvotes: 5

Views: 3986

Answers (1)

jfmatt
jfmatt

Reputation: 926

This will probably get closed as "not a real question" or something similar, because it's a stylistic thing that, depending on your point of view, either doesn't have a correct answer or has a different correct answer for every project.

I'm a big fan of the second option, because it means that different people can work on different parts of the project independently. If you happen to write a utility package, it can be dropped into a different project easily rather than having to put three different files all into different places. And, by the same token, it's Bower-friendly, should that be appropriate for your use case.

The advantage of the first approach is that not everything will fit nicely into sections like that. What happens when you have models that both user and admin rely on? You're stuck with either duplicating code, having one with a hard dependency on the other just for that one file, or separating it out into its own module, which quickly deteriorates into a completely flat structure if taken to its logical conclusion.

The Google-friendly terms you're looking for are "package by feature" and "package by layer" if you want to learn more, or if you just enjoy reading Internet slapfights.

Upvotes: 13

Related Questions