Created
February 12, 2019 02:25
-
-
Save yanzm/1ef33e9ae792d2992358fb6a1691f413 to your computer and use it in GitHub Desktop.
DroidKaigi 2019 の 「ぼくのかんがえた最強の Usecase の作り方」 https://www.youtube.com/watch?v=bw8bckLSKiM というセッションで出てきたビジネスロジックの実装を考えてみました。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// DroidKaigi 2019 の 「ぼくのかんがえた最強の Usecase の作り方」 https://www.youtube.com/watch?v=bw8bckLSKiM | |
// というセッションで出てきたビジネスロジックの実装を考えてみました。 | |
// | |
// - 設定が有効なら救急の番号には Prefix をつけない | |
// - 設定が有効ならフリーダイアルの番号には Prefix をつけない | |
// - 無視リストの宛先には Prefix をつけない | |
// | |
data class PhoneNumber(private val number: String) { | |
init { | |
for (c in number) { | |
check(Character.isDigit(c)) | |
} | |
} | |
val isEmergencyCall: Boolean | |
get() = EmergencyCall.contains(number) | |
val isFreeDial: Boolean | |
get() = FreeDial.contains(number) | |
fun withPrefix(prefix: String): PrefixedPhoneNumber { | |
return PrefixedPhoneNumber(number, prefix) | |
} | |
} | |
data class PrefixedPhoneNumber( | |
val original: String, | |
val prefix: String | |
) { | |
val number = prefix + original | |
} | |
interface PrefixForEmergencyCall { | |
val isEnabled: Boolean | |
} | |
interface PrefixForFreeDial { | |
val isEnabled: Boolean | |
} | |
interface IgnorePhoneNumbers { | |
operator fun contains(phoneNumber: PhoneNumber): Boolean | |
} | |
class PrefixPhoneNumber( | |
private val prefixForEmergencyCall: PrefixForEmergencyCall, | |
private val prefixForFreeDial: PrefixForFreeDial, | |
private val ignorePhoneNumbers: IgnorePhoneNumbers | |
) { | |
fun getPrefixedNumber(phoneNumber: PhoneNumber): PrefixedPhoneNumber { | |
if (prefixForEmergencyCall.isEnabled && phoneNumber.isEmergencyCall) { | |
return phoneNumber.withPrefix(PREFIX_NONE) | |
} | |
if (prefixForFreeDial.isEnabled && phoneNumber.isFreeDial) { | |
return phoneNumber.withPrefix(PREFIX_NONE) | |
} | |
if (phoneNumber in ignorePhoneNumbers) { | |
return phoneNumber.withPrefix(PREFIX_NONE) | |
} | |
return phoneNumber.withPrefix(PREFIX) | |
} | |
companion object { | |
private const val PREFIX = "" // TODO | |
private const val PREFIX_NONE = "" | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment