Skip to content

Instantly share code, notes, and snippets.

@yanzm
Created February 12, 2019 02:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yanzm/1ef33e9ae792d2992358fb6a1691f413 to your computer and use it in GitHub Desktop.
Save yanzm/1ef33e9ae792d2992358fb6a1691f413 to your computer and use it in GitHub Desktop.
DroidKaigi 2019 の 「ぼくのかんがえた最強の Usecase の作り方」 https://www.youtube.com/watch?v=bw8bckLSKiM というセッションで出てきたビジネスロジックの実装を考えてみました。
//
// 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