You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _drafts/2019-10-28-kiss.md
+33-33Lines changed: 33 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,7 +32,7 @@ class NumberManager(private var number: Int) {
32
32
}
33
33
}
34
34
35
-
class numbermanager(private var mNumber: Int) {
35
+
class number_manager(private var mNumber: Int) {
36
36
37
37
companion object {
38
38
const val oneHundred = 100
@@ -182,6 +182,37 @@ object OrderUtilsFixed {
182
182
}
183
183
{% endhighlight %}
184
184
185
+
## YAGNI
186
+
Reguła `YAGNI` (`You Ain't Gonna Need`) mówi o tym, aby w momencie tworzenia kodu umieszczać w nim tylko to co jest lub będzie na pewno potrzebne. Zastosowanie reguły po części realizuje zasadę `KISS`, tzn. niepotrzebny i nieużywany kod mógłby utrudnić zrozumienie projektu. Istnieje spora szansa, że nieużywane fragmenty i funkcjonalności, które powstają przy okazji realizacji innych zadań w przyszłości mogą być zupełnie niepotrzebne lub wymagania zmienią się na tyle, że wymuszą zmianę implementacji. W związku z czym pisanie kodu na przyszłość (np. zestawu funkcji walidacyjnych) może okazać się stratą czasu. Biorąc pod uwagę zasady `KISS` i `YAGNI` należy zastanowić się nad bilansem zysków i strat dla wprowadzania rozwiązań uniwersalnych bez istnienia żadnych alternatywnych typów w momencie tworzenia.
187
+
188
+
{% highlight kotlin %}
189
+
object Validator {
190
+
191
+
//at this moment there is only need to valid password and email
192
+
//for register and login purpose
193
+
194
+
fun isPasswordValid(password: String): Boolean {
195
+
val pattern = Pattern.compile("^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{6,}$")
196
+
val matcher = pattern.matcher(password)
197
+
return matcher.matches()
198
+
}
199
+
200
+
fun isEmailValid(email: String): Boolean {
201
+
val pattern = Pattern.compile("^.+@.+\\..+$")
202
+
val matcher = pattern.matcher(email)
203
+
return matcher.matches()
204
+
}
205
+
206
+
//don't make polish phone number validator, it costs time to create regex
207
+
//there is no need to use it in app at this moment
208
+
fun isPhoneNumberValid(number: String): Boolean {
209
+
val pattern = Pattern.compile("(?<!\\w)(\\(?(\\+|00)?48\\)?)?[ -]?\\d{3}[ -]?\\d{3}[ -]?\\d{3}(?!\\w)")
210
+
val matcher = pattern.matcher(number)
211
+
return matcher.matches()
212
+
}
213
+
}
214
+
{% endhighlight %}
215
+
185
216
## Testowanie
186
217
Dobra praktyką w metodyce testów jest testowanie jak najmniejszej jednostki. W trakcie tworzenia przypadków testów dąży się do uproszczenia problemów do zadań atomowych. Im mniejsze i prostsze metody testowe tym lepiej dla jakości testów.
187
218
@@ -240,35 +271,4 @@ class ValidatorTestFixed {
240
271
{% endhighlight %}
241
272
242
273
## Dokumentacja
243
-
Dokumentacja projektowa również powinna być tworzona w taki sposób, aby była zrozumiała dla potencjalnych odbiorców. Na jej podstawie programista powinien być zdolny do zastosowania funkcjonalności i ewentualnego rozszerzenia projektu. Niewątpliwie dobrze i prosto napisany interfejs znacznie ułatwia tworzenie zrozumiałej dokumentacji.
244
-
245
-
## YAGNI
246
-
Reguła `YAGNI` (`You Ain't Gonna Need`) mówi o tym, aby w momencie tworzenia kodu umieszczać w nim tylko to co jest lub będzie na pewno potrzebne. Zastosowanie reguły po części realizuje zasadę `KISS`, tzn. niepotrzebny i nieużywany kod mógłby utrudnić zrozumienie projektu. Istnieje spora szansa, że nieużywane fragmenty i funkcjonalności, które powstają przy okazji realizacji innych zadań w przyszłości mogą być zupełnie niepotrzebne lub wymagania zmienią się na tyle, że wymuszą zmianę implementacji. W związku z czym pisanie kodu na przyszłość (np. zestawu funkcji walidacyjnych) może okazać się stratą czasu. Biorąc pod uwagę zasady `KISS` i `YAGNI` należy zastanowić się nad bilansem zysków i strat dla wprowadzania rozwiązań uniwersalnych bez istnienia żadnych alternatywnych typów w momencie tworzenia.
247
-
248
-
{% highlight kotlin %}
249
-
object Validator {
250
-
251
-
//at this moment there is only need to valid password and email
252
-
//for register and login purpose
253
-
254
-
fun isPasswordValid(password: String): Boolean {
255
-
val pattern = Pattern.compile("^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{6,}$")
256
-
val matcher = pattern.matcher(password)
257
-
return matcher.matches()
258
-
}
259
-
260
-
fun isEmailValid(email: String): Boolean {
261
-
val pattern = Pattern.compile("^.+@.+\\..+$")
262
-
val matcher = pattern.matcher(email)
263
-
return matcher.matches()
264
-
}
265
-
266
-
//don't make polish phone number validator, it costs time to create regex
267
-
//there is no need to use it in app at this moment
268
-
fun isPhoneNumberValid(number: String): Boolean {
269
-
val pattern = Pattern.compile("(?<!\\w)(\\(?(\\+|00)?48\\)?)?[ -]?\\d{3}[ -]?\\d{3}[ -]?\\d{3}(?!\\w)")
270
-
val matcher = pattern.matcher(number)
271
-
return matcher.matches()
272
-
}
273
-
}
274
-
{% endhighlight %}
274
+
Dokumentacja projektowa również powinna być tworzona w taki sposób, aby była zrozumiała dla potencjalnych odbiorców. Na jej podstawie programista powinien być zdolny do zastosowania funkcjonalności i ewentualnego rozszerzenia projektu. Niewątpliwie dobrze i prosto napisany interfejs znacznie ułatwia tworzenie zrozumiałej dokumentacji.
0 commit comments