Thank you Ilya, What you said make a lot of senses.
On Sunday, March 8, 2015 at 10:36:27 PM UTC-3, Ilya Kazakevich wrote: > > There are 2 types of Apps in Django: > 1) reusable one with clear, documented interface > 2) not reusable one, because it depends on current project heavily. > > Ideally, project consists of several reusable-apps, and project-specific > data is stored in project-specific places like URLConf or filesystem > templates. > But in real life, project may have one or more non-reusable app tied to > this project heavily. If you have app with specific business-logic you do > not want to share it. If you have app with generic logic (forum, shop, > email system, template engine, orm system, new field type, a pack of tags > etc) -- you need to make it shareable. > > It is like modules in python: you have reusable packages and modules, but > you almost always have "yourfile.py" script which is not reusable. But you > should do your best to make this file as small as possible by making most > of your code reusable and moving it to sharable packages and modules. > > Actually, this is not only about Python: in OSes you have execution binary > and .so files (if you are *nix user) or .exe file and .dll files (if you > are windows user). > .so/.dlls are reusable, but .exe (or executable) is not. > > I think you should start with 4 apps: > 1) user management > 2) business logic (models and other staff used both in front-end and > back-end) > 3) front-end with front-end specific code > 4) backend with back-end specific. > > Back and front may depend on business, but not on each other, and business > does not depend on anything. > You should be able to throw backend away, and totaly rewrite it, and be > sure front-end and business logic is not affected. > Speaking in MVC term here, your business is Model, and Front and Back are > both views. You may even need to create some new view, like portal which is > not frontend nor backend, > > You then try to fetch some "generic" parts from you apps. For example you > may find that you use views/templates/tags to display some business data in > fancy way. You may move it to business-logic part, to share between > front-end and back-end. > Or you may find that you just created, say, email blast engine, or report > engine, that can be used even with out of your business logic, in totaly > different project! You then move it to separate app, and make it public to > reuse in other projects. > > Splitting code into modules (units, packages) is one of the hardiest > things in software architecutre. It is ok to refactor existing projects > changing modules structure, because you never know if your layout is good > until you try to support such project. > > Ilya. > > On Sunday, March 8, 2015 at 9:56:51 PM UTC+3, Gabriel Klein wrote: >> >> Hi there, >> >> I'm going to start a big project using Django. >> It will have 3 main sections: >> >> - A "Frontend" section: >> Where the user will consult the data. >> - A "Backend" section: >> Where the ETL and Admins will organize the data >> - A User Management section: >> Where I'll manage user permission, Oauth for my APIs >> >> I'm aware that Django recommend to break down your project into a >> multitude of apps with a very small scope. >> While my User Management section should be simple enough to be on his own >> app my two other sections "Frontend" and "Backend" come with a fairly >> complex snowflake schema (about 15 tables) and sometime with cross >> dependencies between apps. They also come with complex business logic that >> can be break down to smaller apps. >> >> My question is how to shared models across apps? >> I was thinking creating a app only to cary my complex models? >> >> This app can be now reuse within smaller app doing backend or fronted >> jobs. >> >> Any advice will be welcome. >> >> >> -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/4ec5e172-352d-4854-8d19-d0eafff7ad24%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

