コーディングの原則:短い関数


こうぞう
コードの行数は15行を超えないでください.なぜ15ですか.私も知らない.
 1 /**
 2  *  。
 3  */
 4 Ext.define('Happy.form.metadata.Panel', {
 5     extend: 'Happy.form.Panel',
 6     alias: 'widget.happy-metadata-form',
 7     mixins: {
 8         'custom-configable': 'Happy.mixin.CustomConfigable'
 9     },
10 
11     /**
12      *   items。
13      * 
14      * @protected
15      */
16     configItems: function () {
17         var me = this;
18 
19         me.items = Ext.clone(me.metadata.getDefaultFormItems());
20 
21         me.customConfigArray(me.items, 'name', 'config-item-');
22 
23         me.callScene('configItems', arguments);
24     },
25 
26     /**
27      *  。
28      * 
29      * @protected
30      */
31     configButtons: function () {
32         var me = this;
33 
34         var actions = [
35             {
36                 type: 'save',
37                 remoteSave: me.metadata.isLifeCycleIndependent()
38             },
39             {
40                 type: 'close'
41             }
42         ];
43 
44         me.customConfigArray(actions, 'type', 'config-button-');
45 
46         me.buttons = Happy.createActions(actions);
47 
48         me.callScene('configButtons', arguments);
49     },
50 
51     /**
52      *   items, : 。
53      *
54      * @protected
55      */
56     configRelatedItems: function () {
57         var me = this;
58 
59         var relatedItems = me.callScene('getRelatedItems', arguments);
60         if (!relatedItems) {
61             return;
62         }
63         if (relatedItems.length == 0) {
64             return;
65         }
66 
67         me.addDocked({
68             xtype: 'tabpanel',
69             height: 200,
70             dock: 'bottom',
71             items: relatedItems
72         }, 1);
73 
74         me.on('recordloaded', function (form, record) {
75             Ext.Array.each(relatedItems, function (item) {
76                 var grid = me.down(item.xtype);
77                 grid.reconfigure(record[item.plural]);
78                 grid.reselect();
79                 if (!record[item.plural].isNested) {
80                     record[item.plural].reload();
81                 }
82             });
83         });
84     }
85 });

備考:私が今書いている方法は、ほとんどが自然に15行以内に抑えられています.
メリット
  • 関数は名前を付けやすくなり、コード行数の減少は職責の単一化を意味するため、名前の命名が容易になります.
  • 関数が読みやすくなりました.
  • 関数は書きやすくなりました.