先举个例子
public Result doSomething(String balabala);
public class Result{
private Long productId;
....
}
上面接口是其他部门的程序员提供给你的。没有文档,接口没有注释。
首先,我调用这个接口,
Result result= doSomething("fuck");
调用之后,我要返回的productId再去请求其他接口,做其他一些事情。
问题来了:
对这个返回的result,你是直接result.getProductId(); 还是先判断一下,result!= null 然后再result.getProductId();那productId又是Result里的引用类型,你拿到productId要不要再productId != null
,Result还有其他的引用类型,是不是我每用一个非得判空?
可能每个人的习惯不一样,比如写那个接口,有的人是哪怕什么信息都没有返回,也返回一个空的result。有的人是如果没有信息返回就返回null。如果只要是引用类型,我都判断是否为空,是不是显得“过于谨慎”了。文档,注释也不可能规定的那么细,程序员之间的约定吧,那一个几百人的团队,难免会有不遵循约定的。你们是如何处理的?
又比如一条记录,业务上规定,productId不可能为空的,但是这条记录的插入涉及到两条sql语句,一个程序员的失误没有保证原子性,导致productId为空的记录被插入进去了。这时候,我一旦涉及到处理productId,没有判空,则很有可能导致异常
Saya tidak percaya, jika ada masalah, pengecualian akan dilemparkan untuk mencari awak. . .
Sebenarnya, anda sudah tahu jawapannya, tetapi anda rasa menulis kod seperti ini terlalu memenatkan, dan anda mahu seseorang memberitahu anda "tidak perlu".
Namun, anda juga tahu faktanya.
Agak serupa dengan masalah ini ialah: jangan sekali-kali mempercayai data yang dihantar dari bahagian hadapan.
Begitu juga, perasaan tidak percaya ini akan menjadi lebih hebat jika tiada norma dalam syarikat dan setiap orang mempunyai tahap kemahiran yang berbeza-beza. Kod akhir yang ditulis mungkin dikelilingi oleh beberapa lapisan kod pertahanan untuk menulis barisan kod perniagaan. Kos penyelenggaraan projek ini akan menjadi lebih tinggi dan lebih tinggi.
Sekiranya masalah ini kerap berlaku, ia harus diserahkan kepada pimpinan peringkat atasan untuk menyelesaikan masalah dari peringkat atasan.
Pendapat peribadi:
Tambah medan
Result
dalamerrorCode
, dan kemudian orang yang mendapatkan semula data akan menilai sama ada hasil yang dikembalikan adalah sah berdasarkan nilai ini.Prasyarat:
1
errorCode=0
adalah sah, selebihnya adalah haram;Andaian: 1.
yang dikembalikan ialah
Result
: Saya secara peribadi berpendapat situasi ini tergolong dalam tahapnull
(tetapi saya dengar kebanyakan pengaturcara mengabaikanwarning
? ), apabila menghadapi situasi ini, adalah disyorkan untuk mengemukakan soalan dengan pembekal antara muka dan mencadangkan bahawa pihak lain menyeragamkan nilai pulangan; tetapiwarning
masih batal: Keadaan ini telah mencapai tahapdan memerlukan rundingan yang serius dengan pihak yang satu lagi Pada masa ini:
Result
a) Jika anda mempunyai keyakinan untuk bergaduh dengan pihak lain, lakukan sahaja. ;null
b) Jika a tidak berjaya, Kemudian laporkan masalah tersebut kepada pihak atasan anda dan minta mereka membantu menyelesaikan masalah tersebuterrorCode=0
c) Jika b tidak berjaya, teruskan melakukannya jika boleh, dan tinggalkan jika awak tak boleh.productId
Semasa saya belajar memandu, jurulatih berkata, "Jangan sekali-kali mempercayai kemahiran pemanduan orang lain, dengan cara yang sama, jangan percaya rakan sepasukan babi lain untuk menulis kod yang ketat, melainkan anda bersetuju dan mengesahkan melalui e-mel menilai pelbagai situasi.
Hei, sebab inilah yang menyebabkan lebihan kod Sebaik-baiknya membincangkannya terlebih dahulu
ditentukan mengikut senario perniagaan, jika maksud antara muka ialah "dapatkan butiran produk melalui
skuId
". Dalam senario perniagaan ini, untuk pembekal perkhidmatan, apabila kita lulus dalamskuId
itu tidak wujud dalam sistem 🎜>, adalah munasabah untuk antara muka untuk mengembalikan kitanull
, jadi di sini kita perlu melakukan penghakiman batal padaResult
Result
productId
perlu kosong, anda perlu merujuk pembekal perkhidmatan antara muka (sama adaproductId
kosong, saya secara peribadi mengesyorkan antara muka yang terdedah kepada dunia luar dan medan). yang muncul dalam entiti yang dikembalikan , adalah perlu untuk memastikan bahawa nilai itu bermakna (contohnya,productId
tidak boleh kosong dalam istilah perniagaan, maka jika entiti yang dikembalikan oleh antara muka mengandungi medan ini, medan ini tidak boleh menjadi kosong)Poster mengatakan bahawa jika transaksi pengaturcara tidak menjamin atomicity, ia perlu diselesaikan dalam dua bahagian Premis
productId
tidak boleh kosong dalam perniagaan, untuk cepat membaiki dalam talianBUG
, benarkan versi mendesak terakhir diproses untuk penghakiman batal Dalam keadaan biasa, tidak perlu menilai untuk batal, supaya ralat dapat didedahkan secepat mungkinJika perkhidmatan ini adalah perkhidmatan yang sangat bergantung kepada anda, adalah disyorkan untuk menurunkan taraf antara muka yang tidak stabil ini apabila perlu, supaya walaupun antara muka pembekal perkhidmatan tidak ditulis dalam cara yang standard, ia tidak akan menjejaskan anda. Proses itu sendiri
Oleh kerana ramai orang suka melanggar peraturan dan melakukan perkara yang tidak mengikut peraturan, mereka menganggap bahawa antara muka tidak dipercayai.
Walau bagaimanapun, antara muka adalah peraturan Tujuan mentakrifkan antara muka adalah untuk menjadikan kelas yang dilaksanakan bertindak mengikut peraturan Oleh itu, anda harus mengamalkan sikap amanah.
Sudah tentu, sesiapa sahaja dan mana-mana program mungkin melakukan kesilapan Jika memang terdapat ralat dalam pelaksanaan antara muka, anda harus menyerahkan laporan BUG kepada pihak pelaksana sebelum menunggu pihak lain mengubahnya, anda boleh menggunakan anda kod sendiri untuk mengelakkan ralat. Walau bagaimanapun, ini adalah penyelesaian sementara dan harus diperhatikan melalui ulasan Bahagian kod sementara ini akan dialih keluar selepas pelaksana antara muka membetulkan BUG (ia tidak menolak kemungkinan ia tidak akan dialih keluar, tetapi ulasan akan menerangkan. sebab kepada generasi akan datang).
Secara umum, ikut peraturan dan fokus pada kepercayaan. Walau bagaimanapun, ia tidak diketepikan bahawa beberapa ralat pelaksanaan antara muka mungkin memerlukan kod sementara untuk mengendalikannya.
Untuk menambah: tiada antara muka yang didokumenkan, iaitu peraturannya tidak jelas. Jika peraturan tidak jelas maka semua situasi hanya boleh dipertimbangkan - yang merupakan ketidakpercayaan.
Adalah disyorkan untuk membuat penghakiman. Pisahkan kepada kaedah peribadi.
Program mempunyai konteks dan antara muka diseragamkan. Setiap orang telah membuat perjanjian yang berkaitan sebelum melaksanakan fungsi tertentu, jadi mereka harus dilaksanakan mengikut spesifikasi dan bukannya menulis kod secara membuta tuli untuk mencegah
NullPointerException
.JDK8
atauGuava
'sOptional
boleh sedikit membantu