Mercurial > cgi-bin > hgweb.cgi > tincan
diff doc/philosophy.rst @ 60:682cd33e564c draft
Documentation (incomplete).
author | David Barts <n5jrn@me.com> |
---|---|
date | Sat, 08 Jun 2019 07:43:15 -0700 |
parents | |
children | 55828c01e38f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/philosophy.rst Sat Jun 08 07:43:15 2019 -0700 @@ -0,0 +1,109 @@ +********** +Philosophy +********** + +================= +Be WSGI Compliant +================= + +It's the default standard for Python web frameworks. +Only a fool wouldn't support it. + +======================== +Don’t Reinvent the Wheel +======================== + +TinCan is mostly Bottle and Chameleon. Why rewrite the basic guts of an +application server, when they’ve already been written many times? Why +write a new templating engine, when there’s existing ones out there? +TinCan tries to leverage existing software as much as possible. + +====================== +Keep It Simple, Stupid +====================== + +I wanted to get on with the business of actually *using* TinCan to do things, +so I didn't clutter it up with extra features that would be difficult to +implement. (That's why there's currently no way to choose alternate templating engines +to Chameleon. I tried to do that, and it proved overly complex. Maybe some day.) + +=========================== +Don't Be Gratuitously Bossy +=========================== + +TinCan is not tightly coupled with an ORM, and never will be. I personally dislike +ORM's, and +`I am not alone <http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern>`_. +Moreover, not all web applications need to use an SQL database in the first +place. + +This is of no loss, even for those who prefer to use an ORM, since +it is easy enough use an ORM with TinCan (just add it to the script you make +to load the webapp, and include the ORM in the webapp's ``config`` dictionary). + +=========== +Code-Behind +=========== + +It's maligned by many, but I personally like it, and it +does *not* necessarily mean repudiating the MVC paradigm. + +===================== +Don't Repeat Yourself +===================== + +One of the things I dislike about most Python web +frameworks is that I'm always tiresomely repeating "this is route foo, serviced +by controller foo \(which defines variables bar, baz and blort\), which uses template foo +\(which renders variables bar, baz and blort\)." This is completely unnecessary; +the relationships should be obvious by virtue of the similar names. The framework should figure +it out and just "do the right thing" by default. + +============================ +MVC Comes in Different Forms +============================ + +If you show a little discipline, the template page will describe how data +is presented to the user, and how he or she can interact with it. A view +by any other name is still a view. The code-behind will tie that view into +the underlying business logic, and bridge the gap between the two. A controller +by any other name is still a controller. + +If you don't show discipline, you can clutter your templates up with bits +of Python code that represent controller logic, and clutter your controller up with +bits of presentation details. Of course you can. That's not the framework's +fault; that's the programmer's fault. Bad code can be written in any language, +for any platform. + +================================================== +The Alternative is PHP or CGI, not Django or Flask +================================================== + +I'm not the only one out there who doesn't like all the repeating yourself +that most MVC frameworks make you do. There's still *a lot* of developers +out there writing CGI scripts or using PHP, because CGI and PHP don't make +you do all the busywork that frameworks do. (Can they be blamed? It really +feels silly when all you want is to get a quick, small site up.) + +That's a pity, because CGI is hideously inefficient and PHP is, well, just +plain hideous. \(A root namespace with literally *thousands* of builtins +cluttering it up, builtins with *no* consistent naming convention? Ugh!\) + +Hopefully, by making it easier for people to code efficient web sites using +a well-designed language that's easy to learn, I'll encourage more people +to create efficient sites in a well-designed language. If not, well, at least +I'll encourage *myself* to do so. + +============================================ +Meaningful Error Messages (If You Want Them) +============================================ + +Bottle can be notoriously tight-lipped about what's going wrong if and +when things go wrong. (And when you're developing and debugging code, +things go wrong). TinCan tries as hard as possible to catch errors and +log them. Enable logging, and when you see a 500 error, you will almost +always have a log file with a traceback in it helping to pinpoint the +cause. + +That is, assuming you enable logging. By default, it is turned off, simply +because WSGI provides no default place for errors to go. \ No newline at end of file