Pokaż wyniki 1 do 1 z 1

Temat: Metodyka projektowania logiki aplikacji.

  1. #1
    Zarejestrowany
    Jun 2013
    Postów
    168

    Domyślnie Metodyka projektowania logiki aplikacji.

    Wstęp.
    Czasami bywa trudno wyobrazić sobie jak ma działać aplikacja.
    W tym poście chciałbym Wam przybliżyć jak zarzynam każdy bardziej złożony problem

    Zadanie:
    Policzyć prędkość pobierania plików przez uzytkownika w oparciu o logi z bazy SQL
    zawierające czas rozpoczęscia, czas zakończenia oraz ilość pobranych bajtów.

    Schemat bazy danych:

    Co warte odnotowania - w tabeli nie ma indeksu auto increment,
    nie jest potrzebny, bo nie będziemy aktualizowac konkretnych wierszy.

    Metoda dojścia do rozwiązania:
    Z pomocą przychodzi stara dobra oś X-Y.
    Na osi X mamy czas, na osi Y kolejne rekordy z bazy danych.
    Na poniższej grafice przedstawiam wszystkie możliwe warianty.

    Sorry za opisy w J.angielskim

    Wspierając się powyższą grafiką, przechodzimy do implementacji...

    Implementacja:
    Kod php:
    <?php

    // @logic: res/speed-logic.png
    $user 1;
    $date microtime(true);
    $period 5// sec
    $result $db
        
    ->where('user'$user);
        ->
    where('start >='$date $period);
        ->
    or_where('end <='$date)
        ->
    get('chunk_download')
        ->
    result_array();
    if ( 
    $result ){
        
    $speed 0;
        foreach (
    $result as $row){
            
    // Wariant #1
            
    if ( $row['start'] < $date $period ){
                
    $bytes $row['bytes'];
                
    $duration $result['end'] - $result['start'];
                
    $row_speed $bytes $duration;
                
    $speed += $row_speed;
            }
            
    // Wariant #2 (skipping)
            // Wariant #3
            
    if ( $row['start'] > ($date $period) && $row['end'] < $date ){
                
    $bytes $row['bytes'];
                
    $duration $result['end'] - $result['start'];
                
    $row_speed $bytes $duration;
                
    $speed += $row_speed;
            }
            
    // Wariant #4 (skipping)
            // Wariant #5 (skipping)
            // Wariant #6 (skipping)
        
    }
    }
    else {
        
    $speed 0;
    }
    Obsługujemy tylko wariant 1 oraz 3, pozostałe musimy ominąc.
    Np. wariant 2, 4 oraz 6 wybiegają w przyszłość, nie wiemy kiedy się skończą, więc nie jesteśmy w stanie wyliczyć prędkości ich pobierania.
    Wariant 5 również nas nie obochodzi bo zakończył się przed okresem z którego wyliczamy średnią prędkość.

    Podsumowanie.
    Moim zdaniem poświęcenie kilku minut na stworzenie obrazkowego opisu jest dobrym podejściem.
    Opracowanie wszystkiego w wyobraźni będzie szybsze, ale
    w przypadku utraty koncentracji, konieczności przerwania pracy czy potrzeby naprawy buga,
    korzystając z obrazkowych schematów możemy szybko przypomnieć sobie jak dziala dany segment kodu.
    Jak zwykle najcenniejsze będa Wasze uwagi.


    Pozdrawiam.
    Ostatnio edytowane przez lame2 : 03-20-2014 - 21:07
    Głos racjonalny.

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj