Sobes.tech
Middle+

İnkişafınızda istifadə etdiyiniz şablon dizaynı haqqında danışın.

sobes.tech Süni İntellekt

AI-dan cavab

Aşağıdakı dizayn nümunələrindən istifadə etmişəm:

  • MVC (Model-Görünüş-Kontrol): Tətbiqin məntiqinin bölünməsi. Model məlumatları idarə edir, Görünüş göstərmə üçün cavabdehdir və Kontrol istifadəçi ilə qarşılıqlı əlaqəni işləyir və Model və ya Görünüşü yeniləyir. Angular-da istifadə etdim, burada komponentlər bu ideologiyanı qismən həyata keçirir.

  • MVVM (Model-Görünüş-ViewModel): MVC-yə bənzəyir, lakin Görünüş və Model arasında vasitəçi kimi ViewModel-i daxil edir. ViewModel məlumatların göstərilməsi və istifadəçi əməliyyatlarının işlənməsi üçün biznes məntiqini ehtiva edir. React və Vuex (Vue) ilə işləyərkən aktiv istifadə etdim, burada tətbiqin vəziyyəti mərkəzləşdirilmiş şəkildə idarə olunur.

    // React-də useState istifadə edərək reaktivlik nümunəsi
    import React, { useState } from 'react';
    
    function Counter() {
      const [count, setCount] = useState(0); // useState MVVM mexanizminin bir hissəsidir
    
      const increment = () => {
        setCount(count + 1); // vəziyyəti yeniləmək üçün setter
      };
    
      return (
        <div>
          <p>Sayı: {count}</p> {/* vəziyyətin göstərilməsi */}
          <button onClick={increment}>Artır</button> {/* vəziyyətə təsir edən əməliyyat */}
        </div>
      );
    }
    
  • Komponent nümunəsi: İstifadəçi interfeysini müstəqil, təkrar istifadə oluna bilən komponentlərə bölür. Hər komponent öz məntiqini, markup və stillərini kapsülləyir. Bu, React, Vue və Angular kimi müasir çərçivələrin əsasını təşkil edir.

    // Sadə React komponent nümunəsi
    function Button(props) {
      return (
        <button className="my-button" onClick={props.onClick}>
          {props.label}
        </button>
      );
    }
    
  • Adapter (Adapter): Bir sinifin interfeysini digərinə çevirir ki, müştərilər onu gözləyirlər. Müxtəlif interfeyslərə malik siniflərin birlikdə işləməsinə imkan verir. Xarici kitabxanalar və ya API-lərlə inteqrasiya üçün istifadə etdim.

    // Müxtəlif API müştəriləri ilə işləmək üçün adapter nümunəsi
    class OldApi {
      getDataOld(id) {
        console.log(`Köhnə API-dən məlumat alınır, id ${id} üçün`);
        return { id: id, name: `Məhsul ${id}` };
      }
    }
    
    class NewApi {
      fetchDataNew(itemId) {
        console.log(`Yeni API-dən məlumat alınır, məhsul id ${itemId} üçün`);
        return { itemId: itemId, label: `Məhsul ${itemId}` };
      }
    }
    
    class ApiAdapter {
      constructor(apiClient) {
        this.apiClient = apiClient;
      }
    
      getData(id) {
        if (this.apiClient instanceof OldApi) {
          return this.apiClient.getDataOld(id);
        } else if (this.apiClient instanceof NewApi) {
          // Yeni formatdan məlumatların çevrilməsi
          const newData = this.apiClient.fetchDataNew(id);
          return { id: newData.itemId, name: newData.label };
        }
        throw new Error("Dəstəklənməyən API müştərisi");
      }
    }
    
    const oldApiAdapter = new ApiAdapter(new OldApi());
    console.log(oldApiAdapter.getData(1));
    
    const newApiAdapter = new ApiAdapter(new NewApi());
    console.log(newApiAdapter.getData(2));
    
  • Iterator (İterator): Mürəkkəb obyektin elementlərinə ardıcıl giriş imkanı verir, onun daxili təqdimatını açmadan. Döngülərdə (for...of) və massiv metodlarında (forEach, map, filter) istifadə olunur.

    // JavaScript-də iterator istifadəsi nümunəsi
    const numbers = [1, 2, 3, 4, 5];
    
    // Aydın iterator əldə etmək
    const iterator = numbers[Symbol.iterator]();
    
    console.log(iterator.next()); // { value: 1, done: false }
    console.log(iterator.next()); // { value: 2, done: false }
    // ...
    console.log(iterator.next()); // { value: undefined, done: true }
    
    // for...of ilə iterator istifadəsi
    for (const number of numbers) {
      console.log(number);
    }
    
  • Decorator (Dekorator): Obyekti dinamik olaraq yeni vəzifələr əlavə edir, obyektin strukturunu dəyişmədən funksionallığını genişləndirməyə imkan verir. React-də HOC (Yüksək Səviyyəli Komponentlər) və ya Angular/TypeScript-də dekoratorlar şəklində istifadə etdim.

    // React-də Yüksək Səviyyəli Komponent (HOC) nümunəsi
    function withLogging(WrappedComponent) {
      return function WithLogging(props) {
        console.log(`Komponent ${WrappedComponent.name} render olunur, props:`, props);
        return <WrappedComponent {...props} />;
      };
    }
    
    // HOC tətbiqi
    const EnhancedButton = withLogging(Button);
    
    // Gelişdirilmiş komponentdən istifadə
    // <EnhancedButton label="Bas" onClick={() => console.log('Basıldı!')} />
    
  • Singleton (Odinok): Sinifin yalnız bir nümunəsinin olmasını təmin edir və ona qlobal giriş nöqtəsi təqdim edir. Qlobal vəziyyətin idarə olunması və ya xidmətin (məsələn, loglama və ya konfiqurasiya xidməti) tək nümunəsinin yaradılması üçün istifadə etdim.

    // Odinok nümunəsi
    class ConfigManager {
      constructor() {
        if (ConfigManager.instance) {
          return ConfigManager.instance;
        }
        this.settings = {}; // Parametrlərin ilkinləşdirilməsi
        ConfigManager.instance = this;
      }
    
      setSetting(key, value) {
        this.settings[key] = value;
      }
    
      getSetting(key) {
        return this.settings[key];
      }
    }
    
    const config1 = new ConfigManager();
    const config2 = new ConfigManager();
    
    console.log(config1 === config2); // true (eyni nümunə)
    
    config1.setSetting('apiUrl', 'https://api.example.com');
    console.log(config2.getSetting('apiUrl')); // https://api.example.com
    
  • Fabrika Metodu (Factory Method): Obraz yaradılması üçün interfeys müəyyən edir, lakin hansı obyektin yaradılacağını alt siniflər qərar verir. İstifadə etdim müxtəlif istifadəçi interfeysi elementlərinin və ya konfiqurasiyaya əsaslanan obyektlərin yaradılması üçün.

  • Strateji (Strategy): Alqoritmlərin ailəsini ehtiva edir, hər birini kapsülləyir və bir-birinin yerinə istifadə edilə bilər. Alqoritmin müştərilərdən asılı olmayaraq dəyişməsinə imkan verir. Məlumatların sıralanması, formaların doğrulanması və ya hadisələrin işlənməsi üçün müxtəlif yanaşmaların həyata keçirilməsi üçün istifadə etdim.

Bu nümunələr daha strukturlaşdırılmış, modul, test edilə bilən və dəstəklənən kod yazmağa kömək etdi.