Statické metody nebo singletons výkon-moudrý (Android)?




V aplikacích s malým počtem POJO a mnoho pomocných metod, které pracují na nich, co je lepší výkon-moudrý: učinit z pomocných tříd singletons nebo učinit metody statické?
Statické metody by byly velmi mírně vyšší výkon a paměť moudrý:


1. Vyhnout (potenciální) režii virtuální volání funkcí.
2. Eliminuje paměti potřebné pro skutečné instance třídy.
3. Odstraňuje nutnost získat instanci třídy, když ji použijete.


Ale upřímně bych asi pořád dělat to `singleton`tak jako tak. Zisky byste získat tím, že dělá to je pravděpodobné, že tak malé, že by nulový rozdíl, a to i v mobilním prostředí.
<p>jednoduchá řešení jsou lepší pro dlouhodobou údržbu. a nejde vždy jen o jazykovou znalost. složitá čára (nebo čáry) vyžaduje určitý čas, i když jste odborníkem na daný jazyk. otevřete soubor a začnete číst: "ok, jednoduché, jednoduché, rozumíte, jo, wtf ?!" váš mozek se zastaví a budete muset zastavit a dešifrovat složitou linii. pokud neexistoval měřitelný a konkrétní důvod této implementace, je to „příliš chytré“.</p><p>zjistit, co se děje, se progresivně zhoršuje, jak složitost roste z chytré metody na chytrou třídu na chytrou strukturu. kromě známých přístupů musíte přijít na myšlenkový proces, který šel do vytvoření „chytrého“ řešení, což může být docela obtížné.</p><p>to znamená, že nerad se vyhýbám vzoru (když je jeho použití oprávněné) jen proto, že mu někdo nemusí rozumět. je na nás jako vývojářích, abychom se neustále učili, a pokud něčemu nerozumíme, je to důvod, proč se to učit, a ne se mu vyhýbat.</p> <p>měli byste se držet společné úmluvy o něčem takovém.</p><p>pokud jsou vstupy nastaveny jako tabulkový procesor, lidé pochopí, že stisknutím záložky přejdou na další záznam a první záznam bude zpracován.</p><p>protože říkáte, že se jedná o aplikaci technické podpory, nezní to tak, jako byste to udělali, takže bych řekl, že byste měli mít tlačítko.</p><p>to znamená, že profesionální uživatelé vždy ocení klávesové zkratky, takže práce s kartou <strong>také</strong> zní jako dobrý nápad.</p> Vyzkoušej Chrome portable, třeba i betu a hned budeš chytřejší...[http://portableapps.com/apps/internet/google\_chro...](http://portableapps.com/apps/internet/google_chrome_portable) Máte-li stejnou platformu i verzi aplikace, s největší pravděpodobností jste každý v jiné skupině uživatelů pro A/B testování. Tak vývojáři ověřují účinnost aplikace a nakonec zvolí tu účinnější verzi a zavedou všem. Chce-li lingoty, může zkusit web na PC nebo třeba i v mobilu v nějakém internetovém prohlížeči. Pravděpodobně to zabere. <p>vícenásobný výběr přetažením, ctrl-kliknutí a shift-kliknutí jsou přiměřeně použitelné, pokud uživatel obvykle vybere najednou pouze jeden objekt. mají slabou objevitelnost, ale jsou velmi efektivní pro uživatele. spolu s popisovanou metodou zrušení výběru jsou standardy, takže mnoho uživatelů již ví, jak to udělat, takže zjistitelnost není tak velkým problémem, jak by si člověk myslel. kromě toho je vícenásobný výběr obvykle zkratkou odborníka. ve většině aplikací může vše, co může uživatel dělat s vícenásobným výběrem, také s jednorázovým výběrem - bude to trvat jen déle, takže dostupnost není považována za požadavek. <em>odchylka</em> od standardu, na druhé straně, pravděpodobně zaměří mnoho vašich uživatelů.</p><p>jedním kliknutím vyberte, je dobré, když uživatel musí vybrat více položek, aby mohl úspěšně dokončit klíčovou úlohu. je to rychlejší než kliknutí ctrl, ale ne tak rychle jako kliknutí shift nebo přetažení pro větší počet přilehlých objektů. na druhé straně má mnohem lepší objevitelnost. umístění ovládacího prvku podobného zaškrtávacím políčkům vedle každé ikony účinně komunikuje, že každý výběr přetrvává prostřednictvím jediného kliknutí. možná budete potřebovat tlačítko vymazat pro vymazání všech výběrů.</p> <p>psaní plynulého rozhraní (s ním jsem <a href="http://www.google.ca/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0cbuqfjaa&amp;url=http%3a%2f%2fsoapboxautomation.com%2fproducts%2ffluentdwelling%2f&amp;ei=ao6ttcuck8sdgqesvpsqda&amp;usg=afqjcngcf99lzbzlrfvnrtst7qsww3kxwg">dabbled</a> ) vyžaduje více úsilí, ale má to výplaty, protože pokud to uděláte správně, je výsledný uživatelský kód jasnější. je to v zásadě forma specifického jazykového jazyka.</p><p>jinými slovy, pokud je váš kód načten mnohem více, než je napsán (a jaký kód není?), měli byste zvážit vytvoření plynulého rozhraní.</p><p>plynulá rozhraní jsou více o kontextu a jsou mnohem víc než jen způsoby konfigurace objektů. jak vidíte ve výše uvedeném odkazu, k dosažení:</p><ol> <li>kontext (takže když obvykle provádíte mnoho akcí ve stejném pořadí, můžete je zřetězit, aniž byste museli znovu a znovu prohlašovat svůj kontext).</li> <li>viditelnost (když jdete na <code>objecta.</code> pak vám inteligence dává spoustu rad. v mém případě výše, <code>plm.led.</code> vám poskytuje všechny možnosti pro ovládání vestavěné led a <code>plm.network.</code> vám poskytuje věci, které můžete dělat se síťovým rozhraním. <code>plm.network.x10.</code> vám dává podmnožinu síťových akcí pro zařízení x10. u inicializátorů konstruktoru to nedostanete (pokud si nepřejete, aby byl objekt konstruován pro každý jiný typ akce, který není idiomatický).</li> <li>reflexe (nepoužívá se ve výše uvedeném příkladu) - schopnost převzít výraz linq a manipulovat s ním je velmi výkonný nástroj, zejména v některých pomocných api, které jsem vytvořil pro testy jednotek. dokážu předat výraz getter get, sestavit spoustu užitečných výrazů, zkompilovat a spustit je, nebo dokonce použít getter k nastavení mého kontextu.</li> </ol><p>jedna věc, kterou obvykle dělám, je:</p><pre><code>test.property(t =&gt; t.someproperty) .initializedto(string.empty) .cantbenull() // tries to set to null and asserts argumentnullexception .yaddayadda(); </code></pre><p>nechápu, jak můžete něco takového udělat i bez plynulého rozhraní.</p><p><strong> edit 2 </strong>: můžete také udělat opravdu zajímavá vylepšení čitelnosti, jako například:</p><pre><code>test.listproperty(t =&gt; t.mylist) .shouldhave(18).items() .andthenafter(t =&gt; testaddingitemtolist(t)) .shouldhave(19).items(); </code></pre> <p>v tomto pořadí: b (s podrobným popisem manipulace níže), a (vyhláskováno), c.</p><p>c je pro mě „typické technické řešení“: nejprve se rozhodnete, jak specifikovat dobu trvání, poté určíte data potřebná pro tento algoritmus. spravovat je však pouze dva další ovládací prvky a uživatelé neznají možnosti, které mají před sebou. to znamená, že pokud jsou vaši uživatelé technici/analytičtí myslitelé a je nejjednodušší je implementovat, jděte na to.</p><p>b by bylo vhodnější:</p><p><img src="https://i.stack.imgur.com/fl7eg.png" alt="enter image description here"></p><p>minimální požadavky:</p><ul> <li>ovládání „předvolby“ a ovládání data a času jsou vždy k dispozici (nikdy zakázáno)</li> <li>změnou předvolby se změní čas zobrazený v ovládacích prvcích rozsahu</li> <li>změnou ovládacích prvků rozsahu se změní předvolba na „ostatní“</li> </ul><p>téměř perfektní:</p><ul> <li>porovnejte ruční výběr s vašimi předvolbami a zobrazte „jiné“ pouze v případě, že neexistuje žádná shoda</li> <li>když uživatel ručně vybere „jiné“, zobrazí se nápověda jako „zde vyberte začátek a konec data“</li> </ul><p>výhody:</p><ul> <li>uživatelé s nejasnou představou o vaší aplikaci mají řadu typických možností</li> <li>uživatelé získají okamžitou a konkrétní zpětnou vazbu pro svůj výběr</li> <li>výběr může být upřesněn, např. „další 3 týdny“ lze snadno upravit na „4 týdny“</li> </ul><p>varianty:</p><ul> <li>místo „jiných“ generujte vhodné textové reprezentace (např. „příštích 17 dní“).</li> <li>pokud je aplikace používána většinou běžnými častými uživateli (málo příležitostných uživatelů), zvažte bezplatné zadávání textu, jako je hisham, doporučeno: kliknout a zadat tři časy v daném dni je v pořádku, pro zadávání 30 za hodinu je bolest a volný text vyhraje.<br> (nedokážu si představit jednoduché kombinované rozhraní, které nějakým způsobem neznevýhodňuje začínající uživatele, ale pokud očekáváte širokou škálu uživatelů, možná budete muset za to zvážit některá řešení)</li> </ul><p>poznámky k rozvržení:</p><ul> <li>vynechal bych „z“ čistě pro čistý vzhled, ale je tu kompromis. obecně se snažím dát ovládacím prvkům stejnou velikost a postavit je na několik řádků, abych se vyhnul vzhledu „neklidného tvaru“.</li> <li>seskupte předvolby skupiny a výběr data společně (tj. jim poskytněte určitou vzdálenost od ostatních výběrů)</li> <li>"trvání" je samozřejmě hloupý štítek, promiň;)</li> </ul><hr><p>(vedlejší poznámka: instinktivně bych předpokládal interval sedmi dnů, abych odešel „od 17. února, 0:00 do 23. února, 23: 59: 59,9999 ..“, ale nejsem si jistý, jestli je tento univerzální.)</p> <h1>google</h1><p>google začal používat python) a znovu investoval do vývoje jazyka.</p><blockquote> <p>nemá však firemní podporu ani zabijáckou funkci, která by vysvětlovala náhlý nárůst významu.</p> </blockquote><p>google je firemní podpora. pokud jde o funkce python je oop interpretováno rychle napříč platformami<sup>1</sup> jazyk. co se nelíbí? je to další <em>vynikající</em> nástroj v sadě nástrojů.</p><hr><p><sup>1. <em>rychle se vyvíjí</em>, není rychlé provedení. psaní skriptu pro obecné použití v python je mnohem rychlejší než říci java nebo c, bez ohledu na skutečnost, že by se tyto jazyky spouštěly rychleji).</sup></p> <p><code>node\_load</code> je jen ozdobný obal pro <code>entity\_load</code>.</p><p>to je <code>node\_load</code> volá <code>node\_load\_multiple</code> což je obálka pro <code>entity\_load</code>. to znamená, že výkon není moudrý, ve které funkci používáte, pokud nemusíte načítat mnoho uzlů.</p><p><code>node\_load</code> má mnoho výhod oproti <code>entity\_load</code></p><ul> <li>je to jednodušší</li> <li>zvyšuje čitelnost kódu</li> <li>vrací objekt uzlu namísto pole s uzlovými objekty</li> </ul><p>takže ve všech, <code>node\_load</code> je pohodlí, které byste měli vždy používat, kdykoli je to možné, pak se uchýlit k <code>node\_load\_multiple</code> pro případy, kdy potřebujete načíst mnohem více uzlů.</p><p><code>entity\_load</code> by se mělo použít pro načítání entit, když neznáte typ nebo jej necháte uložený v proměnné. v takovém případě můžete</p><pre><code>entity\_load($type, ...); </code></pre> <p><strong> ani jeden není lepší, protože se vzájemně doplňují </strong></p><p> <a href="http://en.wikipedia.org/wiki/system\_analyst">wikipedia definice analytika systémů</a> je</p><blockquote> <p>systémový analytik zkoumá problémy, plánuje řešení, doporučuje software a systémy a koordinuje vývoj tak, aby vyhovoval obchodním nebo jiným požadavkům.</p> </blockquote><p>programátor analytiků (ačkoli žádná definice není okamžitě k dispozici) je více vyladěn směrem k lovu po obchodních požadavcích a poté je implementován v kódu. pokud je podnik zaměřen na nesmírně složitý vědecký výpočet na standardní hardwarové platformě, pak je znalost algoritmů (tj. analytického programátora) relevantnější, a proto lepší. pokud podnik tyto platformy vytváří, pak je to pravda. chcete-li upgradovat sami sebe, vytvořte oblasti, ve kterých jste slabí a máte zájem o zlepšení. pak se aplikujte na jejich učení.</p>