Apakah menghidupkan dan mematikan fitur UI (atau lainnya) berdasarkan tanggal-bau kode?

11

Kami memiliki sistem mengerikan yang ditulis dalam ASP.NET 2.0 sehingga kami perlu menambahkan beberapa fungsionalitas. Masalahnya adalah bahwa suatu produk tertentu memiliki fitur UI yang harus dinyalakan untuk bisnis yang dimulai setelah tanggal tertentu (dan yang lainnya dimatikan), sementara halaman tersebut harus tampak sama untuk bisnis yang sudah ada.

Saya mendorong untuk menulis ulang halaman untuk bisnis baru karena saya secara naluriah menemukan ide beralih JavaScript UI berbasis tanggal, dan campuran kontrol web untuk bisnis lama dan baru menjadi "tidak rapi" (karena ingin kata yang lebih baik ).

Apakah praktik memiliki UI berbasis waktu menghadirkan praktik yang diterima secara luas, dan jika tidak, risiko apa yang diketahui dari menempuh tindakan itu?

NMrt
sumber
13
Jika persyaratan domain bisnis Anda menentukan bahwa beberapa fitur tidak akan tersedia bagi pengguna kecuali dalam jangka waktu tertentu, maka "sesuai desain." Jika Anda tidak menyukai gagasan kontrol ux muncul dan menghilang, nonaktifkan mereka alih-alih menyembunyikannya. Apapun, teknik ini sangat valid.
Robert Harvey
1
Saya menemukan ungkapan "bisnis dimulai setelah tanggal tertentu" tidak jelas. Apakah yang Anda maksudkan bisnis dengan perusahaan Anda (untuk pelanggan yang mendaftar setelah tanggal tertentu) atau bisnis yang dimulai dengan klien Anda (sehingga klien Anda hanya dapat melakukan hal-hal tertentu dengan data dalam aplikasi mereka jika klien mereka mendaftar setelah tanggal tertentu)? Dalam kasus sebelumnya, Anda berbicara tentang fitur yang tersedia untuk pelanggan Anda. Dalam kasus terakhir, Anda berbicara tentang membatasi tindakan tidak valid pada data tertentu (berdasarkan kondisi dalam data itu sendiri). Jawabannya mungkin sangat berbeda dalam situasi itu.
jpmc26

Jawaban:

22

Tidak ada yang salah dengan mengubah UI berdasarkan fitur mana yang diaktifkan untuk pelanggan, atau jenis penempatan yang telah mereka pilih, tetapi perubahannya harus

  1. bergantung pada flag yang bermakna, misalnya "HAVE_EXPORT" untuk mengaktifkan / menonaktifkan opsi ekspor, bukan pada perbandingan tanggal yang aneh. UI tidak memiliki bisnis mengetahui aturan bisnis tentang apa yang diterbitkan saat itu, ia hanya harus memenuhi tugas UI dan mematuhi instruksi khusus UI.
  2. Dikendalikan sisi server, sehingga pelanggan tidak dapat secara diam-diam mengaktifkan fitur yang belum dibayar.

(Perhatikan bahwa sebaliknya - dis fitur abling setelah waktu tertentu - adalah besar tidak-tidak kecuali Anda sudah dikomunikasikan dengan jelas bahwa Anda menjual versi trial waktu yang terbatas Menciptakan tersebut. Bom waktu dalam keadaan apapun lainnya akan membuat orang membenci Anda lebih cepat dari hampir semua hal lain.)

Kilian Foth
sumber
2
The UI has no business knowing the business rule about what was published when- Baiklah, tetapi bahkan Stack Exchange memiliki aturan UI seperti itu. Misalnya, tautan "hapus" tidak muncul untuk pengguna lain pada pertanyaan tertutup hingga dua hari berlalu, dan opsi Migrasi dinonaktifkan setelah 60 hari.
Robert Harvey
Saya mengklarifikasi pertanyaan berdasarkan jawaban ini: beberapa kontrol akan dihapus, dan yang lain akan ditambahkan, tergantung pada tanggal.
NMrt
13
@RobertHarvey, tapi bagaimana ini diprogram dalam tampilan? Apakah itu seperti if (showDelete) { <button>delete</button> }atau if ((post.date - today).days > 2) { <button>delete</button> }?
Arturo Torres Sánchez
@ ArturoTorresSánchez: Yang pertama - seluruh idenya adalah untuk memasukkan logika bisnis (seperti perhitungan tanggal) ke dalam server. Bagaimanapun, ini akan membuat pertanyaan yang bagus :-).
sleske
11

Persyaratan itu sendiri tidak bermasalah, tetapi ada cara yang baik dan buruk untuk mengimplementasikannya . Jika Anda memiliki kode yang disalin dan ditempel di seluruh tempat yang terlihat seperti:

if (businessInitiationDate > cutoffDate)
  enableNewControlsForThisOneLittlePiece();
else
  enableOldControlsForThisOneLittlePiece();

Itu akan menjadi gila sulit untuk mempertahankan, bahkan jika itu tampak lebih cepat saat ini. Misalnya, mungkin pada titik tertentu beberapa pelanggan lama akan menginginkan tampilan baru. Mungkin di beberapa titik akan ada konfigurasi ketiga dengan tanggal cutoff sendiri.

Idealnya, Anda ingin pernyataan if ini muncul tepat satu kali dalam kode Anda, terutama di sisi server. Namun, Anda juga ingin menghindari duplikasi seluruh aplikasi dan membuat perubahan. Temukan kode umum dan buat faktor itu keluar, lalu buat fungsi kecil terpisah hanya untuk bagian-bagian yang berbeda. Kemudian aktifkan atau nonaktifkan fungsi-fungsi itu dari satu tempat pusat.

Karl Bielefeldt
sumber
6

Ini adalah persyaratan, dan meskipun tampaknya bau - pada dasarnya konfigurasi berdasarkan nilai datetime - tidak ada alasan waktu tidak dapat digunakan untuk mengubah UI Anda. Kasing klasik adalah layar satnav yang berubah dari warna-warna cerah di siang hari menjadi tema gelap di malam hari (dan jika Anda benar-benar berdedikasi, warna tidak aktif di antaranya).

Namun, satu hal yang dapat saya sarankan sebagai perbaikan adalah menghapus konsep tanggal yang memungkinkan kontrol, tetapi nomor versi. Versi menetapkan konfigurasi UI (yaitu Anda memiliki flag untuk mengatakan dikonfigurasi untuk NewCustomer, dan di masa depan dapat diperluas untuk memenuhi kontrol tambahan yang diinginkan NewNewCustomer, dan sebagainya). Ini jauh lebih mudah untuk ditangani dalam kode, dan baunya jauh lebih enak.

Maka Anda hanya memiliki 1 masalah yang mengatur nomor versi berdasarkan beberapa kriteria, dan ini dapat dilakukan dengan pemeriksaan tanggal hari ini, mungkin opsi konfigurasi sisi-server nanti, atau bahkan cookie yang ditetapkan oleh pengguna login beberapa saat di masa depan.

gbjbaanb
sumber
5

Ini terasa seperti kasus khusus dari pertanyaan yang lebih umum: apakah ini praktik yang buruk untuk menonaktifkan fitur UI untuk alasan tertentu sesuai dengan aturan yang telah ditentukan? Maka jawabannya adalah, "tentu saja tidak." Menyerahkan tanggal secara khusus bisa rumit karena tanggal dan waktu itu sulit , tetapi pada prinsipnya umum tidak ada alasan kuat untuk tidak melakukannya jika itu yang diminta oleh persyaratan bisnis Anda.

Mason Wheeler
sumber
3

Jika perubahan harus dilakukan dengan beberapa tujuan bisnis tertentu yang peka terhadap tanggal, maka itu adalah kejahatan yang perlu.

Jika ini tentang menyebarkan revisi ke program yang akan mengubah program secara permanen, dan desain lama tidak akan pernah digunakan lagi, maka lebih baik hanya menggunakan pembaruan pada waktu yang tepat.

Robert Harvey
sumber
1
"lebih baik menyebarkan pembaruan pada waktu yang tepat" Nitpick: Tidak harus .... Misalnya, penerapan mungkin memerlukan waktu henti, yang tidak praktis pada saat sakelar harus dibuat. Atau mungkin akan ada beberapa periode penggunaan paralel ... itu benar-benar tergantung.
sleske
Atau mungkin Anda ingin memiliki tombol "main jingle bells" pada hari Natal. Anda mungkin tidak ingin harus menggunakan ini setiap Natal.
sixtyfootersdude
2

Kedengarannya bagus. Sangat umum untuk memiliki UI yang beradaptasi dengan pengguna yang berbeda, misalnya di sini di stackoverflow, fitur yang berbeda diaktifkan atau dinonaktifkan berdasarkan karma pengguna individu.

Alasan Anda tidak menyukainya adalah karena hal itu jelas menambah kompleksitas relatif terhadap solusi di mana semua orang melihat UI yang sama. Namun kompleksitas tampaknya merupakan kompleksitas esensial , yaitu. ini merupakan persyaratan bisnis, bukan artefak dari keputusan arsitektur yang buruk. Tentu saja akan ada biaya (yang harus Anda komunikasikan kepada bisnis), tetapi jika bisnis memutuskan itu sepadan dengan biayanya, Anda terus menerapkannya.

Risiko yang diketahui: Risiko terbesar adalah kemungkinan untuk menguji UI dalam berbagai konfigurasi. Jika Anda mulai menggunakan / mengaktifkan fitur UI untuk berbagai kelompok pengguna, Anda dapat dengan cepat mendapatkan ledakan konfigurasi yang memungkinkan.

Anda juga harus memastikan untuk menerapkan pembatasan ke dalam lapisan logika bisnis, sehingga Anda memverifikasi bahwa pelanggan tidak dapat melakukan operasi yang tidak diizinkan, bahkan jika UI tidak seharusnya memungkinkan di tempat pertama:

JacquesB
sumber
Ya, pengujian benar-benar rumit jika UI dapat berubah berdasarkan berbagai faktor. Jika harus dilakukan, itu harus dilakukan, tetapi membantu menjaga variasi ke minimum - dan untuk menyediakan cara untuk beralih UI untuk pengujian, terlepas dari hal-hal seperti tanggal saat ini.
sleske
2

Apa yang Anda gambarkan adalah konsep kencan yang efektif , yang sama sekali bukan ide baru dan pada intinya sejenis masalah sementara yang Anda dapat menerapkan pola temporal .

Pada dasarnya apa yang akan Anda lakukan dalam basis data Anda adalah menerapkan tanggal efektif untuk modul formulir atau versi formulir (di sini disebut sebagai komponen), menyimpan beberapa metadata tentang komponen-komponen tersebut dan tanggal mulai / berakhirnya yang efektif. Anda tentu saja akan memerlukan beberapa data tentang pengguna Anda di aplikasi juga.

Sepertinya Anda mungkin memiliki alasan lain yang lebih menarik untuk mempertimbangkan penulisan ulang aplikasi ini. Jika masalah kencan yang efektif adalah satu-satunya masalah Anda, saya akan menyarankan bahwa mungkin menerapkan kencan yang efektif adalah pilihan yang lebih baik. Jika tidak, Anda harus mengevaluasi itu berdasarkan skenario Anda.

ravibhagw
sumber
1

Ini adalah fitur beralih dengan aktivasi berdasarkan tanggal - yang sangat valid. Bayangkan jika fitur itu hanya untuk digunakan selama periode promosi, atau harus berakhir ketika peraturan pemerintah baru masuk pada tanggal tertentu.

Anda bekerja di APS.NET dan JavaScript, tetapi fungsi Java fitur-toggle frame Togglz secara khusus memiliki aturan aktivasi berdasarkan tanggal (dan waktu!) .

pengguna11393
sumber