weryfikacje danych w Getter / Ustawiacz lub gdzieś indziej?




Zastanawiam się, czy to dobry pomysł, aby dokonać **weryfikacji** w **pobierające** i **ustawiające** , czy gdzie indziej w kodzie.


To może być zaskoczeniem, jeśli chodzi o **optymalizację** i **przyspieszenie** aż kod, myślę, że nie powinno się dokonać weryfikacji w pobierające i ustawiające, ale w kodzie gdzie jesteś **aktualizowanie** plików lub bazy danych. Czy się mylę?
Cóż, jeden z reaons dlaczego zajęcia zazwyczaj zawierają członków prywatnych z publicznymi pobierające / ustawiające jest dokładnie ponieważ mogą zweryfikować dane.


Jeśli masz numer niż może wynosić od 1 do 100, na pewno umieścić coś w seter, że sprawdza, a następnie może rzucić wyjątek, który jest złowionych przez kod. Powód jest prosty: jeśli nie rób tego w seter, trzeba pamiętać, że od 1 do 100 ograniczenie każdym razem, gdy go ustawić, co prowadzi do kodu duplikaty lub gdy go zapomnieć, prowadzi do nieprawidłowym stanie.


Jeśli chodzi o wydajność, jestem z Knuth tutaj:



> 
> „Powinniśmy zapomnieć o małej wydajności, powiedzmy około 97% czasu. Przedwczesna optymalizacja jest źródłem wszelkiego zła”
> 
> 
>
Pewnie chodzi Ci o zakładkę Sprawdzanie, która, jak sama nazwa sugeruje, służy głównie do sprawdzania tłumaczeń. Dużo wygodniejszą opcją do tłumaczenia jest zakładka Przetłumacz, gdzie po kliknięciu na zdanie widać wszystkie jego poprzednie tłumaczenia, jak również można podejrzeć tłumaczenie z tłumacza Google. 


Dzisiejszy komentarz zasponsorowało słowo "tłumacz" :) zobacz w ustawieniach. <p>w witrynach, w których pracowałem, wszelkie zmiany, które należy wprowadzić w instancjach produkcyjnych, muszą być skryptowane jako skrypty zmian, które będą działać w sql * plus; ponadto skrypty potrzebne do odtworzenia od podstaw wszystkich obiektów schematu muszą być aktualizowane. wszystkie te skrypty są sprawdzane pod kątem kontroli zmian i stamtąd migrowane.</p><p>możesz kontrolować zmiany ddl lub używać wyzwalaczy ddl, aby wykrywać zmiany, a nawet używać oprogramowania różnicowego do porównywania dwóch wystąpień, ale metody te są niedyskryminujące; często programista wprowadza i cofa wiele zmian w schemacie (np. małe zmiany testowe, tworzenie fałszywych tabel do testowania koncepcji itp.) przed ustaleniem, co dokładnie należy zmienić.</p> aktualizacja jest w narzędziu raporty systemowe. 
po jej akceptacji otworzy się okienko menedżera pakietów i pobierze się co potrzeba. Jest to dość szerokie, ale dam ci tak ogólną odpowiedź, jak tylko mogę.

**CTE ...**

* Są niezindeksowalne (ale mogą używać istniejących indeksów na obiektach, do których istnieją odwołania)
* Nie można mieć ograniczeń
* Są zasadniczo jednorazowe `VIEW` s
* Trwać tylko do momentu uruchomienia następnego zapytania
* Może być rekurencyjny
* Nie masz dedykowanych statystyk (polegaj na statystykach dotyczących podstawowych obiektów)

**#Temp Tables ...**

* Są prawdziwe zmaterializowane tabele, które istnieją w tempdb
* Może być indeksowany
* Może mieć ograniczenia
* Trwaj w życiu obecnego POŁĄCZENIA
* Może odwoływać się do innych zapytań lub podprocedur
* Masz dedykowane statystyki generowane przez silnik

Jeśli chodzi o użycie każdego z nich, mają bardzo różne przypadki użycia.Jeśli masz bardzo duży zestaw wyników lub musisz odwołać się do niego więcej niż raz, umieść go w tabeli `#temp` .Jeśli ma być rekurencyjny, jednorazowy lub po prostu dla uproszczenia logicznego, preferowany jest `CTE` .

Ponadto należy `CTE`**nigdy nie używaj do wykonania**.Prawie nigdy nie przyspieszysz przy użyciu CTE, ponieważ znowu jest to widok jednorazowy.Możesz zrobić z nimi kilka fajnych rzeczy, ale przyspieszenie zapytania nie jest jednym z nich. <p>ma więcej kolumn niż pokaż status tabeli; ale robi sztuczkę:</p><pre><code>select * from information\_schema.tables where table\_schema = database(); </code></pre><p>aktualizacja 2011-06-07 19:02</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = database(); </code></pre><p>te zapytania działają, jeśli ustawisz bieżącą bazę danych.</p><p>możesz także kodować konkretną bazę danych:</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = 'mysql'; </code></pre> <p>byłbym bardzo podejrzliwy wobec jakiegokolwiek zestawu uniwersalnych najlepszych praktyk, ponieważ w większości tych dziedzin diabeł tkwi w szczegółach. to, że informacje są stosunkowo powszechne, nie oznacza, że ​​aplikacja korzysta z danych dokładnie w taki sam sposób, jak inne aplikacje. oznacza to, że twój model danych może być nieco inny.</p><ul> <li>imię i nazwisko: dlaczego przechwytujesz imię? jeśli masz obowiązek przechwycenia pełnego imienia i nazwiska osoby (tj. przygotowujesz dokumenty prawne lub akty urodzenia), prawdopodobnie chcesz dać ludziom więcej miejsca na pisanie niż gdybyś tylko prosił o imię i nazwisko osoby, więc wezwać ich w nowej aplikacji internetowej.</li> <li>adres: co zamierzasz zrobić z adresem? jakie adresy przechowujesz? jeśli przechowujesz adres nieruchomości w stanach zjednoczonych, na której tworzysz hipotekę, prawdopodobnie bardzo zależy ci na uzyskaniu w pełni znormalizowanego adresu, w którym to przypadku model danych prawdopodobnie będzie chciał bardzo blisko pod dowolnym adresem narzędzie normalizacyjne zwraca. jeśli chcesz tylko, aby ludzie mogli wpisać adres w celu dostarczenia produktu, prawdopodobnie wystarczy kilka wierszy tekstu swobodnego. długość linii może zależeć od wymagań dalszych procesów, które wykonują takie czynności jak drukowanie etykiet adresowych.</li> <li>stan: zakładając, że możesz zidentyfikować prawidłowe wartości stanu, prawdopodobnie sensowne jest utworzenie tabeli <code>state</code> i utworzenie relacji klucza obcego między tabelami <code>state</code> i <code>address</code>. ale możliwość zidentyfikowania prawidłowych wartości oznacza, że ​​ograniczasz zestaw prawidłowych adresów przynajmniej do określonego zestawu krajów. to jest w porządku dla wielu stron, ale musisz trochę popracować, aby wesprzeć nowy kraj.</li> <li>miasto: jeśli masz do czynienia z danymi, w których istnieją potencjalnie regulacje na poziomie miasta (tj. w których istnieją różne rodzaje stawek podatkowych, które są stosowane w zależności od miasta), możesz chcieć traktować je podobnie jak państwo i mieć <code>city</code> tabela z prawidłowymi miastami i relacja klucza obcego między tabelami <code>city</code> i <code>address</code>. z drugiej strony, jeśli próbujesz tylko dostarczyć produkt i nie przejmujesz się tym, że masz w tabeli różne wersje tego samego miasta, wystarczy, że użytkownik wprowadzi dowolny tekst. oczywiście, jeśli przechowujesz klucze obce, będziesz mieć sporo pracy, aby upewnić się, że masz wszystkie prawidłowe wartości. ale są produkty, w których chodzi o to, że firma już wykonała tę pracę (tj. bazy danych podatków od sprzedaży).</li> <li>telefon: co robisz z numerami telefonów i dlaczego? niektóre aplikacje będą chciały pobierać numery telefonów w dowolnym formacie, w którym użytkownik zdecyduje się je wprowadzić i zachować to formatowanie dla wszystkich kolejnych zapytań. byłoby to powszechne, jeśli projektujesz osobistą książkę adresową, w której użytkownicy mają własne preferencje dotyczące sposobu przechowywania i wyświetlania numerów telefonów. inne aplikacje chciałyby zignorować wprowadzone formatowanie, wyodrębnić tylko znaki numeryczne, a następnie sformatować dane przy pobieraniu, aby wszystkie numery telefonów miały podobne formatowanie. jeśli prowadzisz działalność dla firm, możesz chcieć wprowadzić oddzielne pole dla użytkowników, aby wprowadzić rozszerzenie. jeśli próbujesz wesprzeć proces połączeń wychodzących, możesz chcieć przechowywać numer kierunkowy i kod kraju w osobnych kolumnach, ponieważ chcesz mieć pewność, że masz okna specyficzne dla strefy czasowej do nawiązywania połączeń z osobami o różnych numerach kierunkowych (tworzenie połączenie z kimś ze wschodniej strefy czasowej o 10 rano będzie znacznie lepsze niż wykonanie tego samego połączenia z kimś w strefie czasowej pacyfiku, gdzie jest 7 rano).</li> <li>płeć: w przypadku wielu aplikacji jest całkowicie rozsądne przechowywanie kodu płci („m” lub „f”) w tabeli. z drugiej strony zdarzają się sytuacje, w których możesz chcieć dodatkowych opcji (inne, interseksualne, transseksualne) lub gdy musisz przechowywać coś takiego jak płeć przy urodzeniu i aktualna płeć.</li> </ul> Z jakiego antywirusa korzystasz? Żeby zmieniać ustawienia systemowe, musisz wyłączyć anrywirus bo ta lokalizacja jest prawdopodobnie pilnowana. Ja używam [Google Keep](/download/pobierz-412-google-keep) - w wersji przeglądarkowej i jako aplikacji. I tam jest opcja notatek. [[testesafety]](//klub-automatyka.s3.dualstack.eu-west-2.amazonaws.com/original/1x/d41685a061de01f91ee9b8f0e68c902fd3f3cc2a.png "testesafety.png")
test wyglada pozytywnie. udalo sie wgrac nową konfiguracje. jedyny minus to event w bufforze diagnostycznym o braku mozliwosci sprawdzenia konsystencji safety. 
sterownik normalnie w run (nie sugerowac sie errorem - on wynikal z tego ze inny sterownik po profibusie byl w stopie przez …