Hello,

About webpy example, I think this is readilly possible in web2py, I mean it
just maybe a better way to structure your model declaration/defintion...
Did you try it with web2py?

Richard

On Mon, Nov 2, 2015 at 9:51 AM, Carlos Cesar Caballero Díaz <
desarro...@spicm.cfg.sld.cu> wrote:

> The dal is a very good piece of software, and it can done practically
> everything that any orm can do, but in my opinion, the problem is not what
> we can do, but how we do it, for example, we have places, and the places
> have reviews, it will be something like this:
>
> db.define_table('review',   Field('author'),   Field('valuea', 'int'),   
> Field('valueb', 'int'),   Field('valuec', 'int'),   Field('place','reference 
> place'))
>
> db.define_table('place',   Field('name'),   Field('description'))
>
> It's clean, there is no problem, but now we need to get the average on a
> review values, and the average of all places reviews, the we get something
> like this:
>
> def get_review_average(row):
>     # all the code...    # ...    return value
>
> db.define_table('review',   Field('author'),   Field('valuea', 'int'),   
> Field('valueb', 'int'),   Field('valuec', 'int'),   Field('place','reference 
> place'))
>    Field.Virtual('value', get_review_average))
> def get_place_reviews_average(row):
>     # all the code calling review.value    # ...    return value
>
> db.define_table('place',   Field('name'),   Field('description'),   
> Field.Virtual('value', get_place_reviews_average))
>
> ok, now is not so clean, the "functions" are before the "variables"
> declarations, we could add some validations, and we get functions code,
> fields declarations, and validation code, in that order, when the model
> grows, the code becomes more difficult to maintain, hardly if the person is
> not who wrote the code.
> Now let's see some weppy-like syntax:
>
> class Review:
>     author = Field()
>     value = Field('int')
>     valuea = Field('int')
>     valueb = Field('int')
>     place = Field('reference place')
>
>     def get_average(row):
>         # all the code...        # ...        return value
> class Place:
>     name = Field()
>     description = Field()
>
>     def get_place_reviews_average(row):
>         # all the code        # ...        return value
>
> db.define_models(Review, Place)
>
> Now the code has a more natural structure, first variables and later
> functions, we dont care the order, because at the end we declare it using
> the define_models() function, and we can use inheritance simply like this:
>
> class OtherReview(Review):
>     valuebc = Field('int')
>
> Now the code is easier to maintain, and easier to reuse, we only need to
> copy class files, and extend from them.
>
> This is not an orm, is just current pyDAL with an alternative structure
> for table declarations.
>
> About the objects, if we could have real orm functionality, we could do
> things like:
>
> object = db.mytable[id]object.name = "the name"object.save()
>
> or
>
> db.mytable.save(object)
>
> The non persistent variables is other thing, in some cases we need to use
> non persistent variables, like flags, with the virtual or method fields, we
> can define non persistent values, but we can't edit them.
>
> Greetings.
>
>
> El 30/10/15 a las 15:34, Anthony escribió:
>
> On Friday, October 30, 2015 at 3:10:29 PM UTC-4, Carlos Cesar Caballero
> wrote:
>>
>> We could use object oriented modeling,
>>
>
> Yes, but the question is, what exactly does that mean to you, and how
> would it improve things over the current DAL? Can you share a specific
> example, possibly including pseudo-code?
>
> Also, are you saying you want an ORM, or are you using "object oriented"
> more generically. If the latter, of course the DAL is already "object
> oriented" in that most of the API involves instantiating objects and
> calling methods on them.
>
>
>> we could save our objects directly to the database
>>
>
> What do you mean by "objects" here? Are you saying you want to save native
> Python objects to the database? If so, that would be a feature of the
> database rather than the abstraction layer interacting with it. Of course,
> web2py does allow you to store arbitrary objects to any database if they
> can be pickled or otherwise serialized and deserialized. Can you give an
> example, and maybe point to how some other favored abstraction layer
> handles it (e.g., SQLAlchemy)?
>
>
>> , we could declare non persistent variables in objects
>>
>
> Not sure what you mean by this. Is this something that can be handled via
> virtual fields or method fields?
>
>
>> , we could have a better code structure in our apps, we could maintain
>> large models easily
>>
>
> Can you be more specific? In web2py, nothing stops you from breaking up
> model code into multiple modules.
>
>
>> , we could reuse or extend model classes easily
>>
>
> This would be one benefit of an ORM approach, though you can already use table
> inheritance
> <http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Table-inheritance>
> with the DAL, and there are other methods of re-using code (e.g., table
> methods).
>
>
>> , we don't will need to worry about the class models files order
>>
>
> That has nothing to do with the DAL or "object oriented" programming --
> that is related to the way web2py executes model files prior to the
> controller and would affect any type of data model definitions. If you
> don't want to worry about that, you can move table definitions to modules
> or use models sub-folders along with response.models_to_run.
>
>
>> , we could even load only the models that we need in controllers without
>> write modules...
>>
>
> How so? If using classes, the class declarations would still be executed
> if they were in a model file. Do you think this would be much more
> efficient than DAL lazy table declarations?
>
> Object oriented programming is not just use an object oriented programming
>> language, and sadly, with web2py is difficult follow the object oriented
>> paradigm when we develop applications
>
>
> Are you speaking generally, or just with regard to the DAL? Is it really
> that you want an ORM and to define database models as classes? If so,
> again, it would be helpful to understand specific examples of where you
> find that superior in some way to the DAL.
>
> Anthony
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to