对于那些编写可重用组件的人来说,如果扩展.NET框架的功能,您认为最佳实践是什么?
例如,我正在创建一个Pop3库,因为.NET中不存在.我是否创建自定义命名空间或使用System.Net.Mail?
我已阅读材料设计指南,但如果它不是黑色(带alpha),我不知道Ripple的颜色应该是什么.
例如,我有一个colorPrimary = blue的应用程序,colorAccent = red.其实我使用的是colorAccent(带alpha),如果我想要一种不同于黑色的颜色,我应该使用colorPrimary(带alpha)?
我检查了谷歌的所有应用程序,但他们从不使用颜色的涟漪.
像我现在的图像:

我们正在设计一个拥有大量数据的Android应用程序("客户","产品","订单"......),我们不希望每次需要某些记录时都查询SQLite.我们希望避免尽可能多地查询数据库,因此我们决定将某些数据始终保留在内存中.
我们最初的想法是创建两个简单的类:
"MemoryRecord":一个基本上包含一个对象数组(string,int,double,datetime等)的类,它们是表记录中的数据,以及从这个数据中获取这些数据的所有方法阵列.
"MemoryTable":一个基本上包含[Key,MemoryRecord] Map和所有操作此Map并在数据库中插入/更新/删除记录的方法的类.
这些类将派生到我们在数据库中的每种表.当然还有其他有用的方法没有在上面列出,但它们在这一点上并不重要.
因此,在启动应用程序时,我们将使用这些类将这些表从SQLite数据库加载到内存中,每次我们需要更改某些数据时,我们都会更改内存并立即将其发布到数据库中.
但是,我们需要您的一些帮助/建议.你能提出一些更简单或更有效的方法来实现这样的事情吗?或者也许一些已经为我们做过的现有课程?
我理解你们要向我们展示的内容,我感谢你们.
但是,假设我们有一个包含2000条记录的表,我需要列出这些记录.对于每一个,我必须查询其他30个表(其中一些有1000条记录,其他有10条记录)在列表中添加其他信息,而这是"飞行"(如你所知,我们必须非常快)此时此刻).
现在您将要说:"只需使用所有这些'连接'构建您的主查询,并一步完成您所需的一切.如果数据库设计合理,SQLite可以非常快......".
好的,但是这个查询会变得非常复杂和确定,即使SQLite非常快,它也会"太慢"(2个4秒,我确认,这对我们来说这不是一个可接受的时间).
另一个复杂因素是,根据用户交互,我们需要"重新查询"所有记录,因为所涉及的表不一样,我们必须与另一组表"重新连接".
因此,另一种方法是只带主要记录(这将永远不会改变,无论用户做什么或想要什么)没有连接(这非常快!)并在每次我们想要一些数据时查询其他表.请注意,在仅包含10条记录的表中,我们将多次获取相同的记录.在这种情况下,这是浪费时间,因为无论SQLite是快速的,查询,游标,获取等等总是会比从一种"内存缓存"中获取记录更昂贵.我想明确指出,我们不打算始终将所有数据保存在内存中,只是我们经常查询的一些表.
我们来到了最初的问题:"缓存"这些记录的最佳方法是什么?我真的很想把重点放在讨论上,而不是"为什么你需要缓存数据?"
architecture performance memcached android design-guidelines
我有一个使用自定义颜色的波纹.但是,颜色永远不会完全不透明.根据什么应该是Ripple的颜色,colorPrimary或colorAccent的答案?(材料设计)它总是具有40%的alpha值.看看答案我试图使用以下v21特定的drawable xml强制选择不透明的红色背景:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ffff0000">
<item android:id="@android:id/mask">
<color android:color="#ffffffff" />
</item>
</ripple>
Run Code Online (Sandbox Code Playgroud)
但是,我总是得到一个阿尔法红色,而不是我想要的不透明红色.是否有可能产生不透明的波纹?这是波纹的屏幕截图,其中红色永远不会完全不透明.
你可以在https://github.com/gradha/Stackoverflow33217896上找到一个简单的涟漪效应示例,使用XML涟漪和另一个由代码生成的涟漪效应.后者表明,如果不重写代码,就不可能实现不透明的纹波.
所以我的这个问题都开始了,当我开始对一个简单的2行postNotification和addObserver.从这个类似的问题,你可以看到,为了使它可测试你需要添加~20行和部分远离编写代码的常用方法.
面对这个问题实际上是我第一次理解单元测试和TDD之间的区别.如果您的代码是可测试的,即如果您遵循TDD思维模式,则单元测试很容易.接下来我被问到如何编写可测试的代码,我没有找到太多的指导原则,每个教程只是跳到编写单元测试.Apple自己的文档没有任何内容.
我最初的想法是,我需要以"函数式编程"为目标,并以纯函数的方式编写我的函数.但是,这又是非常耗时的,并且可能需要在现有代码中进行大量重构,甚至对于新项目需要大量添加的行,我甚至不确定这是否是正确的方法.是否有任何建议的指南或标准可以轻松编写可测试代码?
我已经知道的了:我知道你不应该编写任何代码,除非有测试失败,所以基本上我必须先编写测试,一旦出现错误,即使是编译器错误然后我会切换回实际的类被测试写入任何必要让我的测试代码不给任何错误,然后再切换回测试类,并继续写我的测试和修复编译错误,直到完成.然后运行测试,看看它是否检查我想要检查的内容.
对于所有测试,我应该确保我的测试通过并且确实在我预期失败的地方失败,即测试将在预期失败时通过.
我不知道的是如何以更简单的方式平滑过程.
我不是要求如何编写NSNotificationCenter的可测试代码,我要求编写可测试代码的一般准则.
tdd unit-testing functional-programming design-guidelines swift
我有一段代码如下:
public class ActivityHelper
{
public void SetDate(IList<Activity> anActivityList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
//More methods, properties, fields, etc...
}
Run Code Online (Sandbox Code Playgroud)
这可以很容易地转换为扩展方法.例如:
public static void SetDate(this IList<Activity> aList)
{
foreach(Activity current in anActivityList)
{
current.Date = DateTime.Now;
}
}
Run Code Online (Sandbox Code Playgroud)
原始函数不使用ActivityHelper类中的任何实例特定数据或方法,这使得它看起来像是在错误的位置.这是编写扩展方法的正确时间吗?创建扩展方法的正确方案是什么?
我正在和一位同事讨论一个只有一个公共方法的简单类的API.我最初去了:
class CalculateSomething
{
public:
void operator()(const SomeObject &obj) const;
private:
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,我的同事反对使用operator(),并且为了清楚起见,希望简单地将方法命名为'calculate'.虽然我没有发现这个论点令人信服,但它让我想到了利弊.
我很惊讶地看到我对此的搜索并没有带来太大的影响,因为我认为这是一个非常常见的情况(一类,一类责任).因此,我真的很想听听其他人对此的看法.
我参与了不同国家的不同项目,并指出有时代码变得国际化,比如
设置LargeurEtHauteur() (对于SetWidthAndHeight,fr)
Dim _ListaDeObiecte作为List(Of Object) (对于_ObjectList,ro)
内部void Sohranenie用户ov() (对于SaveUsers,ru)
等.
碰巧在拉丁字母的国家,这种混合更加明显,因为不需要音译.
更重要的是,编程"行话"通常受项目规范语言的启发.有些情况下,"项目语言"中的术语具有英语中不可"翻译"的含义.
还有一些项目,只有作品,法国团队,使用法语单词(比如,Personne,Vehicule,Projet等).
在那种情况下,我个人在规范中添加一个"字典",解释所有业务对象名称,只有这些对象用于其他(法语)语言.
说:
Collectif - ensemble des Personnes ;
所有操作(获取,设置,更新,修改,加载等)均为英文.
现在可以在代码中使用"强"名称: 将Personne添加到Collectif.
PS.
我发笑的VisualStudio编译和运行项目名为点菜按钮.NET"btnAdd É升è已经"或"???????" ...
我有一个在本机iOS(Swift)中实现的应用程序。也有该应用程序的网络版本。一位客户希望将我的应用程序嵌入到自己的应用程序中,并建议我使用iFrame并加载网络版本。我知道这是一个棘手的解决方案,因为Apple可能会因为未使用本机实现而拒绝该应用程序。
我想问的是,是否有一种方法可以将我的应用程序完全打包为框架并以这种方式加载(应用程序大小相当大,有多个viewControllers和功能)。
我了解我将无法访问AppDelegate等App-load功能。
如果我的应用程序具有Library依赖项,还会发生什么?(例如Alamofire)
还有其他我应该关注的事情吗?
谢谢
我有以下课程:
public class Person
{
public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个接受的方法Person和一个Stringas参数:
public void ChangeName(Person p, String name)
{
p.Name = name;
}
Run Code Online (Sandbox Code Playgroud)
由于Person通过引用传递,它应该更改Name传递的实例.
但这种方法比上面的方法更具可读性吗?
public Person ChangeName(Person p, String name)
{
p.Name = name;
return p;
}
Run Code Online (Sandbox Code Playgroud) android ×3
c# ×3
.net ×2
colors ×2
ripple ×2
swift ×2
architecture ×1
c++ ×1
coding-style ×1
frameworks ×1
functor ×1
ios ×1
memcached ×1
namespaces ×1
oop ×1
performance ×1
tdd ×1
unit-testing ×1