Forums / Setup & design / large classes--what is a good maximum number of attributes?

large classes--what is a good maximum number of attributes?

Author Message

Greg McAvoy-Jensen

Saturday 26 April 2008 10:52:09 pm

How big can a class be and still work well? I'm working on a project in which one class has surpassed 100 attributes. Some of the items could be grouped into classes and connected via the object relations datatype. However, the content model doesn't require it.

To further complicate things, the client would like to import information into this class using ezodf import. To make this as easy as possible, this class should stay intact, as ezodf can't import one document into several related objects of different classes--right?

If I keep it as one huge class, will I encounter performance problems?

If we end up NOT being restricted to one class by the ezodf limitation, should I break this large class into several smaller ones? What's a good guideline for a maximum class size?

Incidentally, the class consists mainly of text lines and XML blocks, with a few matrices, 10 images, etc.

Many thanks!

Granite Horizon, Certified Developer of eZ Publish Web Solutions
Provider of the SaaS Solution Granite Horizon In The Cloud | http://granitehorizon.com/cloud
http://granitehorizon.com | +1 916 647 6350 | California USA | @granitegreg
Blog: http://granitehorizon.com/blog

Piotrek Karaƛ

Sunday 27 April 2008 12:56:20 am

Hi Greg!

Wow. 100 attributes is something. I mean we've already gone above 50, but that's about double that.

I cannot provide you with a definite answer to you question, but would like support you postulating an answer ;)

I expect, that in such case everything comes into play:
- the kind of datatypes you use (textlines and XML blocks probably are on two opposite poles of processing cost),
- the kind and frequency of operations you will the objects for,
- the kind of caching, fetching etc. in relation to these giant objects...
- server's ability to cope with those objects with a solid margin before timeouts...

BTW. is there no way to reduce the amount? For example, by joining several XML Blocks and/or text lines into one, formatted XML Block?

Cheers,
Piotrek

--
Company: mediaSELF Sp. z o.o., http://www.mediaself.pl
eZ references: http://ez.no/partners/worldwide_partners/mediaself
eZ certified developer: http://ez.no/certification/verify/272585
eZ blog: http://ez.ryba.eu

Maxime Thomas

Sunday 27 April 2008 11:53:23 pm

For one of our project we went on 130 atributes.
It was usefull to have all in one classe because make a comparator between object of these classes.

Maxime Thomas
maxime.thomas@wascou.org | www.wascou.org | http://twitter.com/wascou

Company Blog : http://www.wascou.org/eng/Company/Blog
Technical Blog : http://share.ez.no/blogs/maxime-thomas

eZ debug

Timing: Jan 19 2025 12:46:20
Script start
Timing: Jan 19 2025 12:46:20
Module start 'content'
Timing: Jan 19 2025 12:46:20
Module end 'content'
Timing: Jan 19 2025 12:46:20
Script end

Main resources:

Total runtime0.1802 sec
Peak memory usage2,048.0000 KB
Database Queries141

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0092 589.2109180.7969
Module start 'content' 0.00920.0060 770.007897.9766
Module end 'content' 0.01520.1649 867.9844526.9219
Script end 0.1801  1,394.9063 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00382.0998200.0002
Check MTime0.00140.7721200.0001
Mysql Total
Database connection0.00160.893710.0016
Mysqli_queries0.125869.82841410.0009
Looping result0.00150.80621390.0000
Template Total0.164591.310.1645
Template load0.00080.441310.0008
Template processing0.163790.875810.1637
Override
Cache load0.00060.311410.0006
Sytem overhead
Fetch class attribute can translate value0.00070.390110.0007
XML
Image XML parsing0.00030.144210.0003
General
dbfile0.00593.2480200.0003
String conversion0.00000.004430.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0001 secs