Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan · Pelajaran

Pemfaktoran Semula Objective-C Legasi

Gunakan teknik pemfaktoran semula lanjutan untuk memperbaik reka bentuk, kebolehbacaan dan kebolehselenggaraan kod Objective-C sedia ada

Pelajaran 1 daripada 411 langkah

Pemfaktoran Semula Objective-C Legasi ialah pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.

Mengapa Memfaktorkan Semula Objective-C Legasi?

Selamat datang! Dalam pelajaran ini, kita akan mendalami pemfaktoran semula pangkalan kod Objective-C legasi. Pemfaktoran semula bermaksud memperbaik struktur dalaman kod tanpa mengubah tingkah laku luarannya.

Bagi aplikasi Objective-C yang lebih lama, pemfaktoran semula amat penting. Proses ini membantu mengurangkan pepijat, menjadikan kod lebih mudah difahami serta membuka jalan kepada ciri baharu dan pemodenan.

Mengenal Pasti Bau Kod

Sebelum memfaktorkan semula, kita perlu mengenal pasti bahagian yang memerlukan penambahbaikan. Bahagian ini sering dipanggil 'bau kod' – petunjuk bahawa mungkin terdapat masalah pada reka bentuk kod.

  • Kaedah Panjang: Kaedah yang melakukan terlalu banyak perkara.
  • Objek Tuhan: Kelas yang mempunyai terlalu banyak tanggungjawab.
  • Kod Pendua: Logik yang sama muncul di beberapa tempat.
  • Penamaan Lemah: Nama pemboleh ubah, kaedah atau kelas yang tidak jelas.

Mengenal pasti perkara ini membantu anda memfokuskan usaha pemfaktoran semula.

Pemfaktoran Semula: Ekstrak Kaedah

Teknik Ekstrak Kaedah melibatkan penukaran serpihan kod daripada kaedah yang lebih besar menjadi kaedah baharu yang tersendiri. Ini menjadikan kaedah asal lebih pendek dan jelas, manakala kaedah baharu itu boleh digunakan semula.

Pertimbangkan contoh ini, yang menunjukkan satu kaedah mengendalikan beberapa langkah penjanaan laporan:

#import <Foundation/Foundation.h>

@interface ReportGenerator : NSObject
- (void)generateDetailedReportForData:(NSArray<NSNumber *> *)data values:(NSArray<NSNumber *> *)values;
@end

@implementation ReportGenerator
- (void)generateDetailedReportForData:(NSArray<NSNumber *> *)data values:(NSArray<NSNumber *> *)values {
    // Calculate sum of data
    double sumData = 0;
    for (NSNumber *num in data) {
        sumData += [num doubleValue];
    }
    NSLog(@"Data Sum: %.2f", sumData);

    // Calculate average of values
    double sumValues = 0;
    for (NSNumber *num in values) {
        sumValues += [num doubleValue];
    }
    double avgValues = sumValues / [values count];
    NSLog(@"Values Average: %.2f", avgValues);

    // Check for anomalies (simplified example)
    if (sumData > 100 && avgValues < 10) {
        NSLog(@"Anomaly Detected.");
    } else {
        NSLog(@"No anomaly detected.");
    }

    // Log final report generation time
    NSDate *now = [NSDate date];
    NSLog(@"Report generated at: %@", now);
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        ReportGenerator *generator = [[ReportGenerator alloc] init];
        NSArray<NSNumber *> *sampleData = @[@20.0, @30.0, @60.0];
        NSArray<NSNumber *> *sampleValues = @[@5.0, @8.0, @7.0];
        [generator generateDetailedReportForData:sampleData values:sampleValues];
    }
    return 0;
}

Pemfaktoran Semula: Pemboleh Ubah Penerang

Kadangkala, ungkapan kompleks sukar difahami sepintas lalu. Pemfaktoran semula Perkenalkan Pemboleh Ubah Penerang mencipta pemboleh ubah sementara untuk menyimpan hasil ungkapan kompleks dan memberikannya nama yang jelas serta deskriptif.

Ini meningkatkan kebolehbacaan tanpa mengubah logik. Lihat syarat ini:

#import <Foundation/Foundation.h>

@interface PriceCalculator : NSObject
- (CGFloat)calculatePriceForQuantity:(NSInteger)quantity isPremiumCustomer:(BOOL)isPremium hasCoupon:(BOOL)hasCoupon;
@end

@implementation PriceCalculator
- (CGFloat)calculatePriceForQuantity:(NSInteger)quantity isPremiumCustomer:(BOOL)isPremium hasCoupon:(BOOL)hasCoupon {
    CGFloat basePrice = 100.0 * quantity;
    
    // Complex condition
    if (quantity > 10 && isPremium && !hasCoupon) {
        basePrice *= 0.8; // 20% discount
    } else if (quantity > 5 && (isPremium || hasCoupon)) {
        basePrice *= 0.9; // 10% discount
    }
    return basePrice;
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        PriceCalculator *calculator = [[PriceCalculator alloc] init];
        NSLog(@"Price 1: %.2f", [calculator calculatePriceForQuantity:15 isPremiumCustomer:YES hasCoupon:NO]);
        NSLog(@"Price 2: %.2f", [calculator calculatePriceForQuantity:7 isPremiumCustomer:NO hasCoupon:YES]);
    }
    return 0;
}

Pemfaktoran Semula: Pemalar Simbolik

Gantikan Nombor Ajaib dengan Pemalar Simbolik membantu menjadikan kod lebih mudah difahami. 'Nombor ajaib' ialah nilai berangka berkod keras yang muncul terus dalam kod tanpa penjelasan.

Menggantikannya dengan pemalar bernama (contohnya, #define atau const) meningkatkan kebolehbacaan dan memudahkan perubahan pada masa hadapan.

#import <Foundation/Foundation.h>

@interface ScoreEvaluator : NSObject
- (NSString *)evaluateScore:(NSInteger)score;
@end

@implementation ScoreEvaluator
- (NSString *)evaluateScore:(NSInteger)score {
    // Magic numbers: 90, 75, 60
    if (score >= 90) {
        return @"Excellent";
    } else if (score >= 75) {
        return @"Good";
    } else if (score >= 60) {
        return @"Pass";
    } else {
        return @"Fail";
    }
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        ScoreEvaluator *evaluator = [[ScoreEvaluator alloc] init];
        NSLog(@"Score 95: %@", [evaluator evaluateScore:95]);
        NSLog(@"Score 70: %@", [evaluator evaluateScore:70]);
    }
    return 0;
}

Pemfaktoran Semula: Gabungkan Syarat

Apabila beberapa ungkapan bersyarat menghasilkan keputusan yang sama, anda boleh menggunakan Gabungkan Ungkapan Bersyarat. Ini bermaksud menggabungkannya menjadi satu ungkapan logik yang lebih ringkas.

Teknik ini memudahkan kod dan mengurangkan pengulangan, lalu menjadikannya lebih mudah dibaca dan diselenggara.

#import <Foundation/Foundation.h>

@interface UserValidator : NSObject
- (BOOL)isUserEligibleForFeature:(BOOL)hasSubscription isActive:(BOOL)isActive isBetaTester:(BOOL)isBetaTester;
@end

@implementation UserValidator
- (BOOL)isUserEligibleForFeature:(BOOL)hasSubscription isActive:(BOOL)isActive isBetaTester:(BOOL)isBetaTester {
    // Original logic:
    if (hasSubscription) {
        return YES;
    }
    if (isActive && isBetaTester) {
        return YES;
    }
    return NO;
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        UserValidator *validator = [[UserValidator alloc] init];
        NSLog(@"User 1 Eligible: %@", [validator isUserEligibleForFeature:YES isActive:NO isBetaTester:NO] ? @"YES" : @"NO");
        NSLog(@"User 2 Eligible: %@", [validator isUserEligibleForFeature:NO isActive:YES isBetaTester:YES] ? @"YES" : @"NO");
        NSLog(@"User 3 Eligible: %@", [validator isUserEligibleForFeature:NO isActive:YES isBetaTester:NO] ? @"YES" : @"NO");
    }
    return 0;
}

Pemfaktoran Semula: Pindahkan Kaedah/Medan

Pemfaktoran semula Pindahkan Kaedah dan Pindahkan Medan bertujuan meningkatkan kesepaduan kelas dan mengurangkan gandingan. Jika sesuatu kaedah atau medan dalam satu kelas berinteraksi terutamanya dengan kelas lain, mungkin lebih sesuai jika ia berada dalam kelas tersebut.

  • Pindahkan Kaedah: Memindahkan kaedah ke kelas yang paling sesuai dengannya.
  • Pindahkan Medan: Memindahkan pemboleh ubah tika ke kelas yang paling banyak menggunakannya.

Ini memastikan data dan tingkah laku yang berkaitan kekal bersama.

Pemfaktoran Semula: Ekstrak Kelas

Apabila satu kelas menjadi terlalu besar dan memikul terlalu banyak tanggungjawab, ia menjadi 'Objek Tuhan'. Pemfaktoran semula Ekstrak Kelas membantu memecahkan kelas tersebut kepada kelas yang lebih kecil dan lebih fokus, setiap satunya dengan satu tanggungjawab.

Ini meningkatkan modulariti dan kebolehujian serta menjadikan kod lebih mudah diurus.

#import <Foundation/Foundation.h>

// Before (simplified God Object concept)
@interface UserProfileManager : NSObject
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *email;

- (void)loadUserDataFromRemoteServer;
- (void)saveUserDataToLocalCache;
- (void)displayProfileOnScreen;
- (BOOL)authenticateUserWithPassword:(NSString *)password;
@end

@implementation UserProfileManager
- (void)loadUserDataFromRemoteServer { NSLog(@"Loading user data..."); }
- (void)saveUserDataToLocalCache { NSLog(@"Saving user data..."); }
- (void)displayProfileOnScreen { NSLog(@"Displaying profile..."); }
- (BOOL)authenticateUserWithPassword:(NSString *)password {
    NSLog(@"Authenticating user...");
    return YES;
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        UserProfileManager *manager = [[UserProfileManager alloc] init];
        manager.username = @"coddykit";
        [manager authenticateUserWithPassword:@"password"];
        [manager loadUserDataFromRemoteServer];
        [manager displayProfileOnScreen];
    }
    return 0;
}

Kebolehbacaan: Penamaan & Gaya

Selain perubahan struktur, meningkatkan kebolehbacaan ialah bahagian penting dalam pemfaktoran semula kod legasi. Ini termasuk:

  • Penamaan Deskriptif: Gunakan nama yang jelas dan ringkas untuk kelas, kaedah dan pemboleh ubah supaya tujuannya dapat dikenal pasti.
  • Konvensyen Objective-C: Patuhi konvensyen penamaan Objective-C yang standard (contohnya, camelCase untuk pemboleh ubah, `CapitalizedCamelCase` untuk kelas, - (void)doSomethingWith:(id)parameter untuk kaedah).
  • Pemformatan Konsisten: Kekalkan inden dan gaya kod yang konsisten di seluruh pangkalan kod.

Amalan ini menjadikan kod lebih mudah difahami oleh anda dan orang lain.

Cabaran Pemfaktoran Semula

Pemfaktoran semula membantu kita menyelenggara dan mengembangkan aplikasi yang kompleks.

Teknik pemfaktoran semula manakah yang paling sesuai untuk kaedah yang telah menjadi terlalu besar dan melaksanakan beberapa tugas yang tidak berkaitan?

Imbas Kembali Pelajaran

Dalam pelajaran ini, kita meneroka teknik pemfaktoran semula utama untuk pangkalan kod Objective-C legasi:

  • Mengenal pasti 'bau kod' seperti kaedah panjang dan Objek Tuhan.
  • Menggunakan teknik seperti Ekstrak Kaedah, Perkenalkan Pemboleh Ubah Penerang dan Gantikan Nombor Ajaib dengan Pemalar Simbolik.
  • Memperbaik struktur dengan Gabungkan Ungkapan Bersyarat, Pindahkan Kaedah/Medan dan Ekstrak Kelas.
  • Kepentingan penamaan yang jelas dan gaya yang konsisten.

Pemfaktoran semula berterusan penting untuk memastikan aplikasi legasi mudah diselenggara dan bersedia untuk pembangunan masa hadapan!

Percuma untuk bermula

Pelajari Objective-C dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pemfaktoran Semula Objective-C Legasi” percuma?

Ya — teks penuh “Pemfaktoran Semula Objective-C Legasi” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, tingkat taraf kepada CoddyKit PRO. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemfaktoran Semula Objective-C Legasi”?

Gunakan teknik pemfaktoran semula lanjutan untuk memperbaik reka bentuk, kebolehbacaan dan kebolehselenggaraan kod Objective-C sedia ada Anda berlatih Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pemfaktoran Semula Objective-C Legasi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan ini?

Ya. Setiap pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pemfaktoran Semula Objective-C Legasi
  2. Mengurus Hutang Teknikal
  3. Strategi Penyelenggaraan Jangka Panjang
  4. Menulis Ujian Pencirian Sebelum Pemfaktoran Semula
← Kembali ke Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan